1. 程式人生 > 其它 >Java異常處理體系

Java異常處理體系

異常機制

異常的體系架構

異常的定義

  • 在實際工作中,遇到的情況不可能都是完美的,使用者在使用過程中不會完全按照你的要求來進行,例如:使用者的輸入不一定符合你的要求,我們程式在執行,記憶體或磁碟可能滿了等等問題
  • 軟體程式在執行過程中,非常可能遇到這些情況,我們將這些情況叫做異常,英文名為:Exception,這些例外情況也就是異常,我們在寫程式的時候需要解決,做出合理的處理,而不至於程式崩潰
  • 異常的發生在程式執行期間,它會影響了正常的程式執行流程

異常的分類

  1. 檢查性異常:最具有代表的檢查性異常是使用者錯誤或問題引發的異常,這是程式設計師無法遇見的,例如要開啟一個不存在的檔案時,一個異常就發生了,這些異常在編譯時不能被簡單的忽略
  2. 執行時異常:執行時異常是可能被程式設計師避免的異常,與檢查性異常相反,執行時異常可以在編譯時被忽略
  3. 錯誤:錯誤不是異常,而是脫離程式設計師控制的問題,錯誤在程式碼中通常被忽略,例如:當棧溢位時,一個錯誤就發生了,他們在編譯也檢查不到的。

架構體系

  • java中把異常當做物件來處理,並定義了一個基類為:java.lang.Throwable作為所有異常的超類
  • 在Java API中已經定義了許多異常類,這些異常類被分為了兩大類,錯誤Error和異常Exception

Error

  • Error類物件有Java虛擬機器生成並丟擲,大多數錯誤與程式碼編寫者所執行的操作無關
  • Java虛擬機器執行錯誤(virtual MachineError),當Jvm不再有繼續執行操作所需的記憶體資源時,將出現OutOfMemoryError。這些異常發生時,Java虛擬機器(jvm)一般會選擇執行緒終止
  • 還有發生在虛擬機器試圖執行運用時,如類定義錯誤(NoClassDeFoundError),連結錯誤(LinkageError)。這些錯誤是不可查的,因為他們在應用程式的控制和處理能力之外,而且絕大多數是程式執行時不允許出現的狀況。

Exception

  • Exception分支中有一個重要的子類RuntimeException(執行時異常):
    1. ArrayIndexOutofBoundException(陣列下標越界)
    2. NullPointerException(空指標異常)
    3. ArithmeticException(算術異常)
    4. MissingResourceException(丟失資源異常)
    5. ClassNotFoundException(找不到類)
  • 等等異常,這些異常是不檢查異常,程式中可以選擇捕獲處理,也可以不處理
  • 這些異常一般是由於程式邏輯錯誤引起的,程式應該從邏輯角度儘可能避免這些異常的發生

Error和Exception的區別

Error通常是災難性的致命的錯誤,是程式無法控制和處理的,當出現這些異常時,jvm一般會選擇終止執行緒;Exception通常情況下是可以被程式處理的,並且在程式中應該儘可能的去處理這些異常

Java的異常處理機制

丟擲異常

throw關鍵字:

public static void main(String[] args) {

    new Demo02().test(1,2);
}

public void test(int a ,int b)
{
    if(b==0){
        throw  new ArithmeticException();  //主動丟擲異常,一般在方法中
    }
}

throws關鍵字

public void test(int a ,int b) throws ArithmeticException
{
    System.out.println(a/b);
}

捕獲異常

nt a=1;
int b=0;

try {//try監控區域
    System.out.println(a/b);
}catch (ArithmeticException e){ //捕獲異常,當發生異常的時候執行該程式碼塊  catch裡面的引數是想要捕獲的異常型別並且可以捕獲多個異常
    //如果要捕獲多個異常 要從小到大的捕獲
    System.out.println("輸入的資料有誤,程式發生異常");
}catch(Throwable e)
    finally { // 處理善後工作,無論是否發生異常都會執行 該區域可以不使用,但是try和catch必須得有 finally可以用來關閉流 資源等
    System.out.println("程式執行結束");
}

測試結果如下所示:

自定義異常

  • 使用Java內建的異常類可以描述在程式設計時出現的大部分異常情況。除此之外,使用者還可以自定義異常。使用者自定義異常,只需繼承Exception類即可
  • 在程式中使用自定義異常類,大體可以分為一下幾個步驟:
    1. 建立自定義異常類
    2. 在方法中通過throw關鍵字丟擲異常
    3. 如果在當前丟擲異常的方法中處理異常,可以使用try-catch語句捕獲並處理;否則在方法的宣告處通過throws關鍵字指明要丟擲給方法呼叫者的異常,繼續進行下一步操作
    4. 在出現異常方法的呼叫者中捕獲並處理異常