我应该在功能上投掷非法抛出吗?
-
24-10-2019 - |
题
我正在构建一个有很多计算的科学软件,当然,论点的长度也不错,所以我使用了 IllegalArgumentException
该课程似乎是该问题的正确名称,但是我应该把 throws IllegalArgumentException
在功能定义上?
我之所以问这个,是因为我写了它,Eclipse编辑并没有要求我尝试捕捉。我认为这就是如何强制执行捕获的方式。我已经在Java.com上阅读了例外处理教程,但我不确定是否正确理解有关我的问题的部分。
解决方案
RuntimeException
喜欢 IllegalArgumentException
用于指示 编程错误. 。该程序本身应该很少能够处理它。有人需要手动修复代码。
潜在的 RuntimeException
应在功能合同(即Javadoc)中以某种方式进行记录 @throws
, ,或者在描述输入时。如果您没有该功能的Javadoc,则可能需要添加throws子句,以记录使用该函数的潜在陷阱,但通常会添加tharts Thart Thart Thart Thart for Runtime Exceptions。
如果给出错误的长度实际上不是编程错误,而是一个例外情况,则我会创建一个新的检查例外(例如BadLengtherRorror)。如果不是特殊情况,请不要使用异常进行流控制。
其他提示
有两种类型的例外:
运行时异常(例如firegalargumentException和nullpoInterException)无需明确捕获,因为它们“不应该发生”。当然,当他们这样做时,您需要在某个地方处理它们。
需要捕获或宣布定期例外,因为它们代表了一种更本质上困难的错误。
您需要阅读未选中的异常 - 从RuntimeException继承的异常。它们不需要在方法标题中声明。
http://download.oracle.com/javase/tutorial/essential/exceptions/runtime.html
最后一段总结了:
如果可以合理地期望客户从例外恢复,请将其作为检查例外。如果客户无法做任何事情以从异常中恢复,请使其成为未选中的异常。
IllegalArgumentException
(例如 NullPointerException
)是一个例子 RuntimeException
. 。这种类型的例外不是所谓的 检查例外. 。 Java要求方法声明他们投掷哪些检查异常,并且如果一种调用方法可能会抛出检查的异常,则调用方法应声明其抛出异常本身,或捕获并处理它。
因此,我的具体建议是否定的,不要声明。当然,但是,您不想抓住它。在大多数情况下,您也不想扔它 除非 这是 意外 行为。如果该方法获得不喜欢的值是非常正常和合理的,那么处理它的方法是错误的。
您可能还需要考虑利用断言。
理解例外的第一点是它们是针对特殊情况的。在考虑您的方法时,您必须问:“如果传递特殊值,该方法是否应该引发异常?”如果答案是“是”,请将其放入您的方法声明中。我不知道您是否明白了,但这很简单。这只是实践问题。