我知道必须处理或指定检查异常,但未检查异常是可选的。如果由于某种原因,我可以合理地预期在方法中发生未检查的异常,我应该将其添加到throws规范中吗?或者我应该把说明书写得尽可能短?
rqenqsqc1#
如果由于某种原因,我可以合理地预期在方法中发生未检查的异常,我应该将其添加到throws规范中吗?由于未检查的异常表示 * 编程错误 *,因此应避免在throws子句中声明它们。一般来说,不应该尝试捕捉这些异常,除非是程序的最高级别。这个规则有一些例外(双关语)--例如,在生产代码中,您应该捕获NumberFormatException。
throws
NumberFormatException
**注意:**有时候,框架的作者会让他们的基础异常继承RuntimeException(例如:HibernateException)。像这样的异常也应该被捕获。
RuntimeException
HibernateException
83qze16e2#
这是一个设计决策。通常你不会这么做。但是如果您认为代码的用户捕获Exception是至关重要的,那么这是一种提示他这样做的方法。另一种方法是将其添加到文档中,并解释捕获Exception的重要性。
Exception
zed5wv103#
在throws-clause中显式声明是不必要的,因为它是关于运行时异常的,但是你应该在javadoc中记录它,这样用户就可以看到在什么情况下会发生这个异常,它意味着什么。
ecbunoof4#
没有使用或影响,这就是为什么我们不应该在throws关键字中声明未经检查的异常,因为throws关键字只需要说服编译器,未经检查的异常不会被编译器检查,因为这些是运行时异常。
4条答案
按热度按时间rqenqsqc1#
如果由于某种原因,我可以合理地预期在方法中发生未检查的异常,我应该将其添加到throws规范中吗?
由于未检查的异常表示 * 编程错误 *,因此应避免在
throws
子句中声明它们。一般来说,不应该尝试捕捉这些异常,除非是程序的最高级别。这个规则有一些例外(双关语)--例如,在生产代码中,您应该捕获NumberFormatException
。**注意:**有时候,框架的作者会让他们的基础异常继承
RuntimeException
(例如:HibernateException
)。像这样的异常也应该被捕获。83qze16e2#
这是一个设计决策。通常你不会这么做。但是如果您认为代码的用户捕获
Exception
是至关重要的,那么这是一种提示他这样做的方法。另一种方法是将其添加到文档中,并解释捕获Exception
的重要性。zed5wv103#
在throws-clause中显式声明是不必要的,因为它是关于运行时异常的,但是你应该在javadoc中记录它,这样用户就可以看到在什么情况下会发生这个异常,它意味着什么。
ecbunoof4#
没有使用或影响,这就是为什么我们不应该在throws关键字中声明未经检查的异常,因为throws关键字只需要说服编译器,未经检查的异常不会被编译器检查,因为这些是运行时异常。