背景
1.爲什麼會有異常機制
答:開發異常處理程序的原因是,如果爲每個發放所有可能發生的錯誤都進行處理的話,任務會顯得過於繁重,程序員也不願意這樣做1.
正文
1.在Java中,異常的種類體系如下所示:
說明:其中所有異常都是從Throwable
繼承而來,但我們程序員關注的只有右分支Exception
子類體系,至於左分支Error
類,是一般程序運行環境由於資源不足、約束失敗等不滿足程序執行條件造成的,這也不是我們能夠控制的。
2.當出現try/catch/finally語句塊與return並用時,無論return出現在try中,還是catch中,只要程序進入到二者中之一,那麼如果有finally語句,就一定會執行finally裏面的子句。
3.JAVA的catch機制是存在順序的,從上而下依次進行匹配,一旦發生異常將不在進行匹配,且子類的異常對象也可以匹配基類的異常Catch處理程序,因此儘量將高層次的異常放到後邊。
4.如果只是重新拋出異常,那麼printStackTrace()方法顯示的將是原來異常拋出點的調用棧信息,而非重新拋出點的信息。
5.對於右分支Exception體系:
(1)被檢查的異常:Exception類本身,及其子類(除RuntimeException)都屬於編譯時異常,要麼通過throws進行聲明拋出,要麼通過try/catch語句捕獲處理,否則不能編譯通過。我們自己定義的異常,如果直接繼承了Exception,那麼就屬於編譯時異常,是被編譯檢查的。
(2)運行時異常:RuntimeException類本身,及其子類(如ClassNotFoundException)都屬於運行時異常,不需要我們進行任何處理,會自動被上一級調用捕獲。
6.如果一個類中含有throws異常聲明,那麼它的子類也一定會有這些異常聲明,且類型保持一致。
- 來源於《java編程思想》 ↩