兩者的關鍵區別在於:用戶是不是能在發生異常時作一些恢復處理java

- 受檢異常必須處理(須要捕獲處理),非受檢異常不須要處理(沒辦法處理)
- 實現類變動(多拋出一個受檢異常),受檢異常封裝性會受影響(外層代碼必須捕獲,寫好的外層代碼可能要捕獲這個新的異常)
- java.lang.Throwable 是個類,不是接口
- 若是異常未影響到系統的安全穩定,能夠轉換成非受檢異常
舉個例子說明:程序員
- 對於受檢異常中的文件不存在異常,只須要catch 住,繼續運行程序就行
- 受檢異常程序員是能夠處理的,或者說這種異常是容許發生的
- 是一種意料以內的狀況
- 從語法上來講,受檢異常是exception類的子類但不能是runtimeexception類的子類
- 若是方法裏面拋出了受檢異常,那麼方法的簽名必須throws這個異常,調用方也會被強制try-catch處理這個異常,這是編譯級別的限制
- 對於非受檢異常好比數組越界或者除零異常,
- 這種屬於一種程序的bug,按照道理來說是程序員編程不當致使的,這種bug一旦發生應該消除
- 若是是runtimeexception或者error的子類那就是非受檢的,這種異常在方法內拋出不須要在簽名處throws