Java 異常處理總結

Java異常類層次結構圖:
圖片來源網絡

Error: 是程序無法處理的錯誤,大部分與代碼編寫者無關,是jvm內部的運行錯誤,比如OutofMemoryError。

Exception: 是程序可以處理的錯誤

異常還分爲可查異常和不可查異常:

可查異常:

編譯器必須要求處理的異常,出了RuntimeException及其子類之外的都屬於可查異常,他們的發生是可預計的,是提前用編譯器可以檢查出來的,如果發現有這種異常要麼用trycatch捕獲,要麼用Throw拋出,否則無法運行,編譯無法通過。

不可查異常:

就是RuntimeException 及其字句,還有錯誤,RuntimeException表示的是Jvm常用操作引發的錯誤,比如試圖引用空置,分母爲0,數組越界,等等。

異常還分爲運行時異常和非運行時異常:

運行時異常:

RuntimeException及其子類,不可查異常,可以捕獲可以不捕獲,由程序內部邏輯錯誤引起,應該從邏輯角度杜絕這種異常。

非運行時異常:

是RuntimeException以外的異常,類型上都屬於Exception類及其子類。從程序語法角度講是必須進行處理的異常,如果不處理,程序就不能編譯通過。如IOException、SQLException等以及用戶自定義的Exception異常

Try Catch finally

try 塊:用於捕獲異常。其後可接零個或多個catch塊,如果沒有catch塊,則必須跟一個finally塊。
catch 塊:用於處理try捕獲到的異常。
finally 塊:無論是否捕獲或處理異常,finally塊裏的語句都會被執行。當在try塊或catch塊中遇到return語句時,finally語句塊將在方法返回之前被執行。在以下4種特殊情況下,finally塊不會被執行:
1)在finally語句塊中發生了異常。
2)在前面的代碼中用了System.exit()退出程序。
3)程序所在的線程死亡。
4)關閉CPU。

try、catch、finally語句塊的執行順序:

1)當try沒有捕獲到異常時:try語句塊中的語句逐一被執行,程序將跳過catch語句塊,執行finally語句塊和其後的語句;

2)當try捕獲到異常,catch語句塊裏沒有處理此異常的情況:當try語句塊裏的某條語句出現異常時,而沒有處理此異常的catch語句塊時,此異常將會拋給JVM處理,finally語句塊裏的語句還是會被執行,但finally語句塊後的語句不會被執行;

3)當try捕獲到異常,catch語句塊裏有處理此異常的情況:在try語句塊中是按照順序來執行的,當執行到某一條語句出現異常時,程序將跳到catch語句塊,並與catch語句塊逐一匹配,找到與之對應的處理程序,其他的catch語句塊將不會被執行,而try語句塊中,出現異常之後的語句也不會被執行,catch語句塊執行完後,執行finally語句塊裏的語句,最後執行finally語句塊後的語句;

發佈了124 篇原創文章 · 獲贊 9 · 訪問量 2479
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章