如果我有一个方法,例如getFactorial(int n)
,应该对负输入失败,应该是throw
或ArithmeticException
或IllegalArgumentException
?负数绝对是非法论点;在算术上它们也是一种有点废话。对于程序员为什么该方法无法处理输入,它们只是向程序员提供的指示是否重要?我应该使用ArithmeticException还是IllegalArgumentException?以及有什么区别?
回答
ArithmeticException
是
当出现异常的运算条件时,抛出该异常。
IllegalArgumentException
是
抛出,表明一个方法已通过非法或不适当的 争论。
在你的情况下,这是一个坏方法提供给该方法,所以IllegalArgumentException
似乎更好。
我认为在方法中上升的ArithmeticException
对于计算会产生算术错误更有意义,并且只需通过检查方法输入中的参数就无法猜测问题。
我想这样做更有意义,因为您可以“通过检查来猜测问题...”,即使负因数不存在,所以算术错误 – OffGridAndy
。那么,这只是一个判断电话,它应该出现在堆栈跟踪中。 IllegalArgumentException - 否定阶乘或ArithmeticException - 否定阶乘? – OffGridAndy
你是完全正确的。这是语义问题。但是,为什么我们要定义特定的异常,并且不使用泛型异常或RuntimeException?因为语义很重要。例如,当您收到IllegalArgumentException时,您知道问题来自无效输入。如果合适的话,你甚至可以捕获异常并向客户请求另一个输入。当您遇到ArithmeticException时,您知道这是一个算术问题,但您不知道问题是否与无效输入有关。 ArithmeticException会影响具体的错误来源。 – davidxxx
在这种情况下应该使用IllegalArgumentException
,因为您不希望用户向方法传递负参数(参数)。
如果计算的值没有意义,应该使用ArithmeticException
。
例如,Javadoc为ArithmeticException
状态:
当已经发生异常的运算条件抛出。例如,一个整数“除以零”将抛出该类的一个实例。
- 1. 我们应该使用clone还是BeanUtils.copyProperties以及为什么
- 2. 我应该使用什么?服务? AsyncTask?还有别的吗?
- 3. 我应该使用System.out.println()还是别的?
- 4. 什么是lzo和lzf,以及区别?
- 5. Sxml与xexp有什么区别,为什么我应该使用哪个?
- 6. Selenium Webdriver和angular e2e之间有什么区别,以及每个应该在什么时候使用?
- 7. NSTextField和NSTextFieldCell有什么区别,以及我绑定了哪些区别?
- 8. 我应该使用分区还是有更好的方法?
- 9. 何时以及为什么我们应该使用类System.ComponentModel.Container?
- 10. Android什么是setLevel()以及何时应该使用它?
- 11. git.cmd vs git.exe - 有什么区别,应该使用哪一个?
- 12. 我应该使用HSV/HSB还是RGB?为什么?
- 13. SqlCommand.Prepare()做什么以及它应该在什么时候使用?
- 14. '@reify'做什么以及应该在什么时候使用?
- 15. 什么是objc_setAssociatedObject()以及在什么情况下应该使用它?
- 16. 何时以及为什么我应该使用长/双而不是长/双?
- 17. PHP 5.3.x和PHP 5.2.x有什么区别,我应该使用哪一个?
- 18. min和普通文件有什么区别,我应该使用哪一个?
- 19. 什么时候应该使用require()以及何时使用define()?
- 20. Subversion中的Head的概念是什么以及Trunk的区别是什么
- 21. 我可以使用RavenDB(NoSQL)还是应该使用MySQL(RDBMS)?
- 22. 我应该使用public $ var还是应该使用__construct()?
- 23. 我应该使用contenteditable还是别的吗?
- 24. NHibernate,我应该使用ReadCommitted还是ReadUncommited事务隔离级别?
- 25. 练习115;我应该使用getters/setters还是别的?
- 26. 我应该使用PurePDF还是AlivePdf
- 27. 我应该使用ABPersonViewController还是ABUnknownPersonViewController
- 28. 我应该使用Series.replace还是Series.str.replace?
- 29. 我应该使用requestanimationframe还是setTimeout?
- 30. 我应该使用SASS还是SCSS?
'IllegalArgumentException',因为失败是由于超出可接受范围的参数而发生的。 –