淺談Java異常的分類與處理

關於Java異常的分類與處理,可以說在Java 中,所有的異常派生於 Throwable 接口。這些異常,又被分為 Error 和 Exception。這兩類異常,又衍生了一些子類。

不過,我們應當把精力放在 RuntimeException 上,因為“所有的運行時異常,都是程序員的問題”。這類異常,又被叫做未檢查異常,通常交由 JVM 處理。相對應的,那些我們知道可能會出現問題、,被叫做已檢查的異常。這類異常需要開發者手動向上級拋出,直到 JVM 級別,或者在調用方法時使用 try-catch 處理。

異常捕獲:在編碼過程中,如果方法的檢查異常被精心設計,那麼我們只管拋出異常即可。但是,一旦調用方法的地方沒有對這種可能出現的異常進行處理,那麼程序就會終止。所以,要對異常進行捕獲操作,正如之前的字符串轉數字的方法一樣。

淺談Java異常的分類與處理

根據經驗,程序中應該捕獲那些知道如何處理的異常,把“職責”外的異常,交給方法的調用者去處理。下面是一個異常捕獲流程的示例代碼:

淺談Java異常的分類與處理

在上述代碼中,① 中進行操作,捕獲了 Exeptionx 或者 Exceptiony 時,② 進行異常處理;捕獲了 Exception1 時, ③ 把該異常包裝;捕獲了 Exception 2 時,④ 直接拋出異常;無論有無異常發生,⑤ 都會執行。

上面的代碼還有一個問題,就是 finally 代碼中包含返回值。尚學堂•百戰程序員陳老師指出有以下規則:try 代碼塊中包含 return 語句,finally 語句中的代碼也會被執行;若 finally 中也包含 return 語句,則會替代 try 中的語句。使用異常的技巧:不要過分細分異常,能用一個 try 塊處理的儘量用一個,然後按層次捕獲異常,下面的代碼是被建議的:

淺談Java異常的分類與處理

適當地轉化異常,如:可以把一個 NumberFormatException 轉化成自定義的異常,遇到異常情況,可以更加嚴格一點。如:拋出 EmptyStackException 比 NullPointerException 更加語義化,學會把異常傳遞,即:“早拋出,晚捕獲”。

淺談Java異常的分類與處理


分享到:


相關文章: