2017-04-30 31 views
1

如果我有一个方法,例如getFactorial(int n),应该对负输入失败,应该是throwArithmeticExceptionIllegalArgumentException?负数绝对是非法论点;在算术上它们也是一种有点废话。对于程序员为什么该方法无法处理输入,它们只是向程序员提供的指示是否重要?我应该使用ArithmeticException还是IllegalArgumentException?以及有什么区别?

+0

'IllegalArgumentException',因为失败是由于超出可接受范围的参数而发生的。 –

回答

1

ArithmeticException

当出现异常的运算条件时,抛出该异常。

IllegalArgumentException

抛出,表明一个方法已通过非法或不适当的 争论。

在你的情况下,这是一个坏方法提供给该方法,所以IllegalArgumentException似乎更好。

我认为在方法中上升的ArithmeticException对于计算会产生算术错误更有意义,并且只需通过检查方法输入中的参数就无法猜测问题。

+0

我想这样做更有意义,因为您可以“通过检查来猜测问题...”,即使负因数不存在,所以算术错误 – OffGridAndy

+0

。那么,这只是一个判断电话,它应该出现在堆栈跟踪中。 IllegalArgumentException - 否定阶乘或ArithmeticException - 否定阶乘? – OffGridAndy

+0

你是完全正确的。这是语义问题。但是,为什么我们要定义特定的异常,并且不使用泛型异常或RuntimeException?因为语义很重要。例如,当您收到IllegalArgumentException时,您知道问题来自无效输入。如果合适的话,你甚至可以捕获异常并向客户请求另一个输入。当您遇到ArithmeticException时,您知道这是一个算术问题,但您不知道问题是否与无效输入有关。 ArithmeticException会影响具体的错误来源。 – davidxxx

0

在这种情况下应该使用IllegalArgumentException,因为您不希望用户向方法传递负参数(参数)。

如果计算的值没有意义,应该使用ArithmeticException

例如,JavadocArithmeticException状态:

当已经发生异常的运算条件抛出。例如,一个整数“除以零”将抛出该类的一个实例。

相关问题