1. 程式人生 > 其它 >Java學習-07-Java異常

Java學習-07-Java異常

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