那麼何爲Checked Exception, 何爲Unchecked Exception。
所示
正如上圖中所示:
- Checked Exception: 指的是不能恢復,必須要被使用者來處理的一類異常,如果不捕獲,那麼編譯會報錯。例如,IOException。
- Unchecked Exception: 指的是在運行時纔會導致程序奔潰的異常,編譯時候並不會報錯。例如,Runtime Exception。
如果在代碼中處處來處理Checked Exception,那麼代碼就會變成冗長並且可讀性變差,所以在某些情況下需要對其進行處理,變成Unchecked Exception。
A.Checked Exception在編寫代碼時就能發現
B.Checked Exception必須要被捕獲或者拋出
C.Unchecked Exception在運行時才能發現
D.FileNotFoundException屬於Checked Exception,以上描述均正確!!
-----------
在Java中exception分爲checked exception和unchecked異常,兩者有什麼區別呢?
從表象來看,
-
checked異常就是需要在代碼中try ... catch ...的異常,編譯器在編譯代碼時會進行校驗,如果沒有對這些異常進行捕捉,就會編譯出錯。(本人理解:checked異常就是可以預料到會出現異常,爲了防止真的出現異常,代碼中必須顯式地捕捉checked異常)。
-
unchecked異常就是該類異常不是一定會出現的異常,可能是由於代碼寫的有問題(例如,數組下標越界),運行環境異常(例如,內存不足)。(本人理解:unchecked異常就是沒法預先判定的異常,因爲異常是由於代碼的編寫錯誤或者運行環境的問題,編譯器無從知曉這些異常)。
前人總結了一張簡化Java中異常類的層次結構:
- 派生於Error或RuntimeException的異常稱爲unchecked異常
- 剩下的異常就是checked異常(注意,上圖中就剩下IO異常,其實是不準確的)
國外有人總結了一張更爲全面的異常層次結構圖:
------------