2017-04-30 26 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狀態:

當已經發生異常的運算條件拋出。例如,一個整數「除以零」將拋出該類的一個實例。

相關問題