java 程序設計語言可拋出三種結構(throwable):java
雖然何時拋出什麼,不老是那麼的清晰,可是依然存在一些指導性原則api
- 若是能夠適當的恢復,請使用受檢異常(強迫調用者處理該異常或者拋出去)
- API 設計者讓api 用戶面對受檢異常,強迫處理受檢異常
未受檢的拋出結構包括(運行時異常、錯誤)jvm
- 兩者都是不須要也不該該被捕獲的可拋出結構
- 若是拋出爲受檢異常,每每就屬於不可恢復的情形,繼續執行下去有害無益
使用運行時異常代表變成錯誤設計
雖然 java 語言規範沒要求,可是錯誤每每被jvm保留用來表示資源不足、約束失敗、或其餘是程序沒法執行下去的條件資源
- 約定俗成,最好不要再去建立Error 的子類
- 全部未受檢拋出結構都應該是RuntimeException 的子類
- 能夠定義一個新的拋出結構(不屬於上述三者),這樣作沒有任何益處,並且困擾api使用者
總之:io
- 可恢復異常,使用受檢異常
- 程序錯誤,使用運行時異常
- 受檢異常每每指明瞭恢復條件,提供輔助方法就很重要(好比電話呼叫失敗,捕獲異常能夠查詢欠費金額而且返回給用戶看)