[筆記] 讀《JAVA 技術手冊》之 Java 的例外處理機制

在 Java 中所有的例外都屬於 Throwable 的物件,但 Throwable 又分為兩大類: Error 以及 Exception。 而 Error 與 Exception 皆繼承自 Throwable 類別。


簡單的 Error 與 Exception,可以說: (1) Error 大多是系統本身發出的錯誤,可預期。 (2) 而 Exception 大多發生在程式有錯, 執行期間發生錯誤的時候,通常不可預期。
另外 我們可以從可檢測例外 (checked) 以及不可檢測例外來 (un-checked) 來區分例外:
(1) 可檢測例外: 有點像是白名單的感覺,如果發生了,大概知道是什麼情況,在理解範圍內可預料的失敗狀況。 (2) 不可檢測例外: 可能是程式執行期間發生狀況, 或是系統資源不足, 或是函式庫的弊病, 或是環境設定上等等,舉個例子來說,目前沒有什麼好方法可以預測 OutOfMemoryError。


至於 Throwable 底下哪些算是不可檢測例外?
(1) 屬於 Error 的都是不可檢測例外。常見如: StackOverFlowError, OutOfMemoryError, NoClassFoundError。 (2) Exception 的子類別 RuntimeException 以及 RuntimeException 的子類別也都屬於不可檢測例外。(RuntimeException 常見的有: NullPointException, IndexOutOfBoundsException, IllegalArgumentException…等等。) 其他沒有提到的都屬於可檢測例外,例如: IOException, SQLException, ClassNotFoundException… 等等。 處理例外 假如是 checkedException,表示此例外為可檢測例外,基本上可以使用 try catch 的區塊處理,或是 throws 拋出。 假如是 UncheckedException,表示不可檢測例外,某些情況你也可以使用 try, catch, throws (假如是接到數學算式錯誤, 陣列個數有問題, null 指標問題等等,就可以處理),但也有可能是記憶體不夠, JVM 有問題等等之類的例外,則不建議做例外處理,適當地讓錯誤反應出來。 讀書筆記參考自: 《JAVA 技術手冊第六版 》- P. 72 《猛虎出柙雙劍合璧版》 - 第四章 Java 例外處理機制。

留言

這個網誌中的熱門文章

[Android] 筆記 手機上測試自己的 APP

解決fatal: Not a git repository (or any of the parent directories): .git錯誤

[Android 筆記] 設定 ImageView 的圖檔來源