如果我有一個方法,例如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',因爲失敗是由於超出可接受範圍的參數而發生的。 –