我应该在throws规范中声明未经检查的异常吗?

时间:2014-01-01 18:23:35

标签: java exception throws

我知道必须处理或指定已检查的异常,但未经检查的异常是可选的。

如果由于某种原因我可以合理地预期在方法中发生未经检查的异常,我应该将它添加到throws规范吗?或者我应该尽可能缩短规格吗?

3 个答案:

答案 0 :(得分:20)

  

如果由于某种原因我可以合理地预期在方法中发生未经检查的异常,我应该将它添加到throws规范中吗?

由于未经检查的异常表示编程错误,因此应避免在throws子句中声明它们。通常,除了程序的最高级别之外,不应尝试捕获这些异常。此规则有一些例外(双关语) - 例如,在生产代码中,您应该捕获NumberFormatException

注意:有时,框架的作者会使其基本异常继承RuntimeException(例如HibernateException)。这样的例外情况也应该被抓住。

答案 1 :(得分:6)

这是一个设计决定。通常你不会这样做。但是,如果您认为代码的用户捕获Exception至关重要,那么这是一种暗示他这样做的方法。另一种方法是将其添加到文档中,并解释捕获Exception的重要性。

答案 2 :(得分:3)

在throws-clause中明确声明是没有必要的,因为它是关于运行时异常的,但是你应该在javadoc中记录它,这样用户就可以看到这种异常可能发生在哪种情况下,它是什么意思。