java 異常體系以及異常的捕獲
java 異常是程式執行過程中出現的錯誤。Java把異常當作物件來處理,並定義一個基類java.lang.Throwable作為所有異常的超類。在Java API中定義了許多異常類,分為兩大類,錯誤Error和異常Exception。其中異常類Exception又分為執行時異常(RuntimeException)和非執行時異常(非runtimeException),也稱之為不檢查異常(Unchecked Exception)和檢查異常(Checked Exception)。
1、Error與Exception
Error是程式無法處理的錯誤,比如OutOfMemoryError、ThreadDeath等。
這些異常發生時,Java虛擬機器(JVM)一般會選擇執行緒終止。
Exception是程式本身可以處理的異常,這種異常分兩大類執行時異常和非執行時異常。程式中應當儘可能去處理這些異常。
2、執行時異常和非執行時異常
執行時異常: 都是RuntimeException類及其子類異常: IndexOutOfBoundsException索引越界異常
ArithmeticException:數學計算異常
NullPointerException:空指標異常
ArrayOutOfBoundsException:陣列索引越界異常
ClassNotFoundException:類檔案未找到異常
ClassCastException:造型異常(型別轉換異常)
這些異常是不檢查異常(Unchecked Exception),程式中可以選擇捕獲處理,也可以不處理。這些異常一般是由程式邏輯錯誤引起的。
非執行時異常:是RuntimeException以外的異常,型別上都屬於Exception類及其子類。從程式語法角度講是必須進行處理的異常,如果不處理,程式就不能編譯通過。如:
IOException、檔案讀寫異常
FileNotFoundException:檔案未找到異常
EOFException:讀寫檔案尾異常
MalformedURLException:URL格式錯誤異常
SocketException:Socket異常
SQLException:SQL資料庫異常
3、異常的捕獲和處理
Java異常的捕獲和處理是一個不容易把握的事情,如果處理不當,不但會讓程式程式碼的可讀性大大降低, 而且導致系統性能低下,甚至引發一些難以發現的錯誤。
try、catch方式: try{ //(嘗試執行的)程式程式碼 }catch(異常型別 異常的變數名){ //異常處理程式碼 }finally{ //異常發生,方法返回之前,總是要執行的程式碼 } try、catch、finally三個語句塊應注意的問題 第一、try、catch、finally三個語句塊均不能單獨使用,三者可以組成 try...catch...finally、try...catch、 try...finally三種結構,catch語句可以有一個或多個,finally語句最多一個。 第二、try、catch、finally三個程式碼塊中變數的作用域為程式碼塊內部,分別獨立而不能相互訪問。如果要在三個塊中都可以訪問,則需要將變數定義到這些塊的外面。 第三、多個catch塊時候,只會匹配其中一個異常類並執行catch塊程式碼,而不會再執行別的catch塊,並且匹配catch語句的順序是由上到下。
拋異常給上一級方式:
public static void demo() throws Exception{ //丟擲一個檢查異常 throw new Exception("方法demo中的Exception"); } 我們看上面的程式碼可以看到兩個關鍵字,throw和throws關鍵字 throw:是用於方法體內部,用來丟擲一個Throwable型別的異常。 throws:是用於方法體外部的方法宣告部分,用來宣告方法可能會丟擲某些異常。僅當丟擲了檢查異常,該方法的呼叫者才必須處理或者重新丟擲該異常。當方法的呼叫者無力處理該異常的時候,應該繼續丟擲。
異常處理是為了程式的健壯性。異常能處理就處理,不能處理就丟擲,最終沒有處理的異常JVM會進行處理。對於一個應用系統來說,應該有自己的一套異常處理框架,這樣當異常發生時,也能得到統一的處理風格,將優雅的異常資訊反饋給使用者。 --------------------- 本文來自 JaredYang_csdn 的CSDN 部落格 ,全文地址請點選:https://blog.csdn.net/dianzijinglin/article/details/52241757?utm_source=copy