我知道必须处理或指定已检查的异常,但未经检查的异常是可选的。
如果由于某种原因我可以合理地预期在方法中发生未经检查的异常,我应该将它添加到throws规范吗?或者我应该尽可能缩短规格吗?
答案 0 :(得分:20)
如果由于某种原因我可以合理地预期在方法中发生未经检查的异常,我应该将它添加到throws规范中吗?
由于未经检查的异常表示编程错误,因此应避免在throws
子句中声明它们。通常,除了程序的最高级别之外,不应尝试捕获这些异常。此规则有一些例外(双关语) - 例如,在生产代码中,您应该捕获NumberFormatException
。
注意:有时,框架的作者会使其基本异常继承RuntimeException
(例如HibernateException
)。这样的例外情况也应该被抓住。
答案 1 :(得分:6)
这是一个设计决定。通常你不会这样做。但是,如果您认为代码的用户捕获Exception
至关重要,那么这是一种暗示他这样做的方法。另一种方法是将其添加到文档中,并解释捕获Exception
的重要性。
答案 2 :(得分:3)
在throws-clause中明确声明是没有必要的,因为它是关于运行时异常的,但是你应该在javadoc中记录它,这样用户就可以看到这种异常可能发生在哪种情况下,它是什么意思。