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

nkcskrwz  于 2023-05-21  发布在  Java
关注(0)|答案(4)|浏览(110)

我知道必须处理或指定检查异常,但未检查异常是可选的。
如果由于某种原因,我可以合理地预期在方法中发生未检查的异常,我应该将其添加到throws规范中吗?或者我应该把说明书写得尽可能短?

rqenqsqc

rqenqsqc1#

如果由于某种原因,我可以合理地预期在方法中发生未检查的异常,我应该将其添加到throws规范中吗?
由于未检查的异常表示 * 编程错误 *,因此应避免在throws子句中声明它们。一般来说,不应该尝试捕捉这些异常,除非是程序的最高级别。这个规则有一些例外(双关语)--例如,在生产代码中,您应该捕获NumberFormatException

**注意:**有时候,框架的作者会让他们的基础异常继承RuntimeException(例如:HibernateException)。像这样的异常也应该被捕获。

83qze16e

83qze16e2#

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

zed5wv10

zed5wv103#

在throws-clause中显式声明是不必要的,因为它是关于运行时异常的,但是你应该在javadoc中记录它,这样用户就可以看到在什么情况下会发生这个异常,它意味着什么。

ecbunoof

ecbunoof4#

没有使用或影响,这就是为什么我们不应该在throws关键字中声明未经检查的异常,因为throws关键字只需要说服编译器,未经检查的异常不会被编译器检查,因为这些是运行时异常。

相关问题