【Java面試】請簡單說一下你對受檢異常和非受檢異常的理解

跟著Mic學架構 發表於 2022-06-23
Java 面試

Hi,我是Mic

今天給大家分享一道阿里一面的面試題。

這道題目比較基礎,但是確難倒了很多人。

關於”受檢異常和非受檢異常的理解“

我們來看看普通人和高手的回答。

普通人:

嗯。。。。。。。

執行異常不需要捕獲的其他異常是需要強制捕獲的,像一些IO異常。

高手:

好的。

所謂的受檢異常,表示在編譯的時候強制檢查的異常,這種異常需要顯示的通過try/catch來捕捉,或者通過throws丟擲去,否則從程式無法通過編譯。

image-20220509101305694

而非受檢異常,表示在編譯器可以不需要強制檢查的異常,這種異常不需要顯示去捕捉。

在Java裡面,所有的異常都是繼承自java.lang.Throwable類,Throwable有兩個直接子類,Error和Exception。

Error用來表示程式底層或者硬體有關的錯誤,這種錯誤和程式本身無關,比如常見的OOM異常。這種異常和程式本身無關,所以不需要檢查,屬於非受檢異常。

Exception表示程式中的異常,可能是由於程式不嚴謹導致的,比如NullPointerException。

Exception下面派生了RuntimeException和其他異常,其中RuntimeException執行時異常,也是屬於非受檢異常。

所以,除了Error和RuntimeException及派生類以外,其他異常都是屬於受檢異常,比如IOException、SQLException。

image-20220509102846978

之所以在Java中要設計一些強制檢查的異常,我認為主要原因是考慮到程式的正確性、穩定性和可靠性。

比如資料庫異常、檔案讀取異常,這些異常是程式無法提前預料到的,但是一旦出現問題,就會造成資源被佔用導致程式出現問題。

所以這些異常我們需要主動捕獲,一旦出現問題,我們可以做出相應的處理,比如關閉資料庫連線、檔案流的釋放等。

以上就是我對這個問題的理解!

總結

這個問題並不難,但是在實際工作中,如何用好異常又顯得很重要。

從高手的回答中可以明顯看到他對異常的理解層次是比較深的,分別介紹了受檢和非受檢異常,

以及在Java中這兩種異常是如何分類,最後說明了這兩種異常的價值。

喜歡我的作品的小夥伴記得點贊和收藏加關注。

file

版權宣告:本部落格所有文章除特別宣告外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Mic帶你學架構
如果本篇文章對您有幫助,還請幫忙點個關注和贊,您的堅持是我不斷創作的動力。歡迎關注同名微信公眾號獲取更多技術乾貨!