Java中的異常(checked異常和unchecked異常)

目錄

Java的異常層次結構

 最常用的五種RuntimeException

unchecked異常和checked異常的區別

爲什麼要對unchecked異常和checked異常進行區分?


Java的異常層次結構

要想明白Java中checked Exception和unchecked Exception的區別,我們首先來看一下Java的異常層次結構。 
  這是一個簡化的Java異常層次結構示意圖,需要注意的是所有的類都是從Throwable繼承而來,下一層則分爲兩個結構,Error和Exception。其中Error類層次描述了Java運行時系統的內部錯誤和資源耗盡錯誤,這種錯誤除了簡單的報告給用戶,並盡力阻止程序安全終止之外,一般也米有別的解決辦法了。

 最常用的五種RuntimeException

unchecked異常和checked異常的區別

Java 定義了兩種異常(C#只有unchecked異常):

  - Checked exception: 繼承自 Exception 類。代碼需要處理 API 拋出的 checked exception,要麼用 catch 語句,要麼直接用 throws 語句拋出去。

  - Unchecked exception: 也稱 RuntimeException,它也是繼承自 Exception。但所有 RuntimeException 的子類都有個特點,就是代碼不需要處理它們的異常也能通過編譯,所以它們稱作 unchecked exception。RuntimeException(運行時異常)不需要try...catch...或throws 機制去處理的異常。

將派生於Error或者RuntimeException的異常稱爲unchecked異常,所有其他的異常成爲checked異常。儘管,這個定義十分簡單,但是RuntimeException卻是一個非常讓人容易混淆的觀念,似乎我們所有的異常都是在程序運行的過程中。我《Effective Java》中關於Ru ntimeException異常的闡述也不是那麼盡如人意,

Use checked exceptions for recoverable conditions and runtime exceptions for programming errors (Item 58 in 2nd edition)

不過從這句話中我們可以簡單引申一下,也就是說,如果出現了RuntimeException,就一定是程序員自身的問題。比如說,數組下標越界和訪問空指針異常等等,只要你稍加留心這些異常都是在編碼階段可以避免的異常。如果你還是覺得這兩個概念不好區分,那麼“最暴力“的方法就是將常見的RuntimeException背下來,這樣就可以省去很多判斷的時間。

爲什麼要對unchecked異常和checked異常進行區分?

原因其實很簡單,編譯器將檢查你是否爲所有的已檢查異常提供了異常處理機制,比如說我們使用Class.forName()來查找給定的字符串的class對象的時候,如果沒有爲這個方法提供異常處理,編譯是無法通過的。 


 
————————————————
版權聲明:本文爲CSDN博主「崩了呀」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/vooDOTA/article/details/88292837

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章