2015-11-01 72 views
0

我總是使用catch(Exception e){// whatever}但實際上是正確的嗎?爲什麼我應該使用特定的異常,如果一般異常適用於一切?它以某種方式影響性能?Java何時捕獲一般異常和特定異常

+2

沒有性能差異,但在特定例外的情況下,您可以專門處理它們以從錯誤中恢復。如果你只是捕捉'Exception',那麼你可以做的最好的事情就是打印它的堆棧跟蹤。但是,例如,如果您正在構建ATM/Banking應用程序,則可以捕獲「InsufficientFundsException」,並以與「InvalidPinException」不同的方式對待它。 –

+0

感謝您的提示:) – Welite

回答

4

我總是使用catch(Exception e){// whatever},但實際上是正確的嗎?

不,這是違反良好的建議,以抓住最合適的特定例外。

爲什麼我應該使用特定的異常如果一般異常適用於一切?

因爲您並不真正期待的異常可以被掩蓋。 例如,執行某些數據庫操作時,可能會發生 和SQLException,這可能是 ,您可以實現它的優雅處理。 如果ArrayIndexOutOfBoundsException被拋出, 這將是意想不到的,並且最有可能表示編程錯誤。 但是,如果您改爲SQLException,您會發現Exception, ,那麼您可能永遠不會知道意外的ArrayIndexOutOfBoundsException被拋出。 優雅的清理可能也不適用於這種例外。

使用特定的異常還可以使代碼更具可讀性: 讀者可以理解try-catch守護的代碼中可能出現哪些錯誤。

與此相關的是,當你聲明一個拋出異常的方法時,聲明應該使用最適合抽象的異常。

它會以某種方式影響性能嗎?

根本不是。