1. 程式人生 > 其它 >java基礎學習-異常Day09

java基礎學習-異常Day09

異常

1.什麼是異常

  • 異常指程式執行過程中出現的不期而至的各種情況。如:檔案找不到,網路連線失敗,非法引數等。
  • 異常發生在程式執行期間,他影響了正常的程式執行流程

2.簡單分類

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

3.異常體系結構

  • java把異常當做物件來處理,並定義一個基類java.lang.Throwable作為所有異常的超類

  • 在java API中定義了許多異常類,這些異常分為兩大類,錯誤Error和異常Exception。

Error

  • Error類物件由java虛擬機器生成並丟擲,大多數錯誤與程式碼編寫者所執行的操作無關
  • java虛擬機器執行錯誤(Virtual MachineError),當JVM不再有繼續執行操作所需的記憶體資源時,將會出現OutOfMemoryError。這些異常發生時,java虛擬機器一般會選擇執行緒終止。

Exception

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

Error和Exception的區別

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

異常處理機制

1.丟擲異常

2.捕獲異常

3.異常處理五個關鍵字

  • try,catch,finally,throw,throws
public static void main(String[] args) {
    int a = 10;
    int b = 0;
    
    //假設有多個異常,catch捕獲異常類的範圍要從小到大
    try {//try監控區域
        System.out.println("a/b");
    }catch (Error e){//catch(想要捕獲的異常型別)捕獲異常
        System.out.println("Error");
    }catch (Exception e){
        System.out.println("Exception");
    }catch (Throwable t){
        System.out.println("Throwable");
    }finally {//處理善後
        System.out.println("finally");
    }
    //finally可以不要,當使用IO流,需要關閉資源類的使用finally處理(必定會執行)
}
//Ctrl+Alt+T:自動生成try,catch



結果輸出:Exception
        finally
public static void main(String[] args) {
    int a = 10;
    int b = 0;

    try {
        new test().test1(1,0);
    }catch (ArithmeticException e){
        e.printStackTrace();
    }

}
//假設方法內處理不了這個異常,方法上丟擲
public void test1(int a, int b) throws ArithmeticException{
    if (b == 0){
        throw new ArithmeticException();
    }
    System.out.println(a/b);
}

自定義異常

  • 使用java內建的異常類可以描述在程式設計時出現的大部分異常情況。除此之外使用者還可以自定義異常。使用者自定義異常類,只需繼承Exception類即可

  • 在程式中使用自定義異常,大致步驟:

    • 建立自定義異常類

    • 在方法中通過throw關鍵字丟擲異常物件

    • 如果在當前丟擲異常的方法中處理異常,可以使用try-catch語句捕獲處理;否則在方法的宣告處通過throws關鍵字指出要丟擲給方法呼叫者的異常,繼續進行下一步操作。

    • 在出現異常方法的呼叫者中捕獲並處理異常。

      public class MyException extends Exception{
          //傳遞數字>10
          private int detail = 10;
      
          public MyException(int a) {
              this.detail = a;
          }
      
          //toString:異常的列印資訊
      
          @Override
          public String toString() {
              return "MyException{" + "detail=" + detail + '}';
          }
      }
      
      public class test2 {
          //可能存在異常的方法
          static void test(int a) throws MyException{
              System.out.println("傳遞的引數為:" + a);
              if (a>10){
                  throw new MyException(a);//丟擲異常
              }
              System.out.println("OK");
          }
      
          public static void main(String[] args) {
              try {
                  test(1);
              } catch (MyException e) {
                  //增加一些處理異常的程式碼塊
                  System.out.println("MyException-->" + e);
              }
          }
      }