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