自定义例外 - 已选中还是未选中?

时间:2015-08-03 00:38:39

标签: java exception

创建用户定义的异常时,如果将异常创建为已选中或未选中,最佳做法是什么?

我知道不需要在代码中处理未经检查/运行时异常。

3 个答案:

答案 0 :(得分:3)

如果异常可以恢复 - 应该检查。如果异常无法恢复且程序必须暂停 - 则应取消选中。

可以找到有关已检查与未检查例外的完整摘要here

答案 1 :(得分:0)

以下是另一个post的回答片段:

  

如果您愿意,自定义异常应该扩展RuntimeException   将其取消选中,然后使用Exception扩展它。

     

使用未经检查的异常不需要调用代码方法   在其throws子句中声明RuntimeException的任何子类   可能在执行方法期间抛出但未捕获。

     

由于调用方法可能无法处理RuntimeException,因此需要执行   抛出RuntimeException时要小心。

链接到完整答案:Extending Exception/RunTimeException in java?

答案 2 :(得分:0)

就个人而言,我发现Java的检查异常机制很麻烦。

虽然可恢复和不可恢复错误之间的区别很有价值,但似乎并不总是特定异常实例的一对一映射及其相关错误的可恢复性,例如。并非所有IOExceptions都可以恢复。

描述已检查和未检查异常的语义同样模糊不清。即使在Java平台库中,也不总是看起来对这些语义的一致解释。例如,检查JDBC平台库中生成的异常;而JPA 2.0 API中生成的异常未经检查。

更有用的语义可能如下:

  • 当您希望 -force - API的用户响应您的库正在生成的异常时,请定义已检查的异常。通常,当异常必须强制客户端执行既不同又重要的事情时,就会发生这种情况。这是对已检查的异常机制的非常有效的使用,该机制成为您导出的API指定的合同的一部分。

  • 如果您希望让API的用户自由决定是自己处理异常还是允许异常处理,则抛出未经检查的异常。

特别是如果您没有创建要在要分发的库中导出的API,则提供的标准运行时异常通常适用于大多数目的:

  • 的NullPointerException
  • 抛出:IllegalArgumentException
  • IllegalStateException异常