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

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

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

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

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

注意:有时,框架的作者使他们的基本exceptioninheritanceRuntimeException (例如HibernateException )。 也应该抓住这样的例外情况。

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

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