Java學習-07-Java異常
內容概要:
1. 異常
2. 異常體系結構
3. Error
4. Exception
5. 異常處理機制
6. 自定義異常
7. 異常小結
異常
異常指程式執行中出現的不期而至的各種狀況,如:檔案找不到、網路連線失敗、非法引數等。
異常發生在程式執行期間,它影響了正常的程式執行流程。
異常體系結構
Java把異常當作物件來處理,並定義一個基類java.lang.Throwable作為所有異常的超類。
在Java API中已經定義了許多異常類,這些異常類分為兩大類,錯誤Error和異常Exception。
Error
Error類物件由Java虛擬機器生成並丟擲,大多數錯誤與程式碼編寫者所執行的操作無關。
Exception
在Exception分支中有一個重要的子類RuntimeException(執行時異常)
-
ArrayIndexOutOfBoundsException(陣列下標越界)
-
NullPointerException(空指標異常)
-
ArithmeticException(算術異常)
-
MissingResourceException(丟失資源)
-
ClassNotFoundException(找不到類)
-
...
-
這些異常是不檢查異常,程式中可以選擇捕獲處理,也可以不處理。
這些異常一般是由程式邏輯錯誤引起的,程式應該從邏輯角度儘可能避免這類異常的發生。
Error和Exception的區別:
-
Error通常是災難性的致命的錯誤,是程式無法控制和處理的,當出現這些異常時,Java虛擬機器(JVM)一般會選擇終止執行緒
-
Exception通常情況下是可以被程式處理的,並且在程式中應該儘可能的去處理這些異常。
異常處理機制
丟擲異常
-
throws總是出現在一個函式頭中,用來標明該成員函式可能丟擲的各種異常。
-
throw總是出現在函式體中,用來丟擲一個異常。
throws和throw區別
-
throw 是語句丟擲一個異常;throws 是方法丟擲一個異常。
-
throws可以單獨使用,但throw不能;
-
throw要麼和try-catch-finally語句配套使用,要麼與throws配套使用。但throws可以單獨使 用,然後再由處理異常的方法捕獲。
1 // throw和throws使用示例(感覺這段程式碼有點問題,看的時候注意,但是先這麼理解,錯了到時候再來改) 2 // 第一種:throw + try catch 自己丟擲自己解決 3 public void test() { 4 5 try{// 丟擲異常 6 throw new Exception(); 7 } catch (Exception e) { 8 System.out.println("Exception"); 9 } 10 11 } 12 // 第二種:throw + throws 自己丟擲,方法再丟擲 13 public void test() throws Exception { 14 // 丟擲異常 15 throw new Exception(); 16 }
捕獲異常 (IDEA捕獲異常快捷鍵:ctrl + alt + t) 選中需要捕獲異常的程式碼,按下快捷鍵
異常處理五個關鍵字:try、catch、finally、throw、throws。
自定義異常
使用Java內建的異常類可以描述在程式設計時出現的大部分異常情況。除此之外,使用者還可以自定義異常。
使用者自定義異常類,只需要繼承Exception類即可。
在程式中使用自定義異常,大體可以分為以下幾個步驟:
-
建立自定義異常類。
-
在方法中通過throw關鍵字丟擲異常物件。
-
如果在當前丟擲異常的方法中處理異常,可以使用try-catch語句捕獲並處理;否則在方法的宣告處通過throws關鍵字指明要丟擲給方法呼叫者的異常,繼續進行下一步操作。
-
在出現異常方法的呼叫者中捕獲並處理異常。
異常小結
-
處理執行時異常時,採用邏輯去合理規避同時輔助try-catch處理。
-
在多重catch塊後面,可以加一個catch(Exception)來處理可能會被遺漏的異常。
-
對於不確定的程式碼,也可以加上try-catch,處理潛在的異常。
-
儘量去處理異常,切忌只是簡單地呼叫printStackTrace()去列印輸出。
-
具體如何處理異常,要根據不同的業務需求和異常型別去決定。
-
儘量新增finally語句塊去釋放佔用的資源。
參考課程:狂神說Java