Day08 JavaSE異常機制

JavaSE 異常機制

一、什麼是異常?

異常指程序中出現的不期而至的各種情況
如:文件找不到、網絡連接失敗、非法參數等。

  • 簡單分類
    • 檢查性異常:用戶錯誤或問題引起的異常,無法預見。
    • 運行時異常:可以捕獲,也可不處理
    • 錯誤ERROR
  • Java把異常當作對象來處理,超類:java.lang.Throwable
    • Error:JVM一般會選擇終止線程。
    • Exception:在程序中儘可能的處理異常。

二、異常處理機制

1 捕獲異常

使用代碼塊

try(){//try監控區域

}catch(){// catch(想要捕獲的異常類型)捕獲異常

}finally{ //處理善後工作,可以不要finally,可用在IO,資源關閉等地方,表示始終執行。

}

可使用快捷鍵: command+alt+T

  • 案例展示一:(1/0異常捕獲)
package com.exception;

public class Demo01 {
    public static void main(String[] args) {
        int a = 1;
        int b = 0;
        try { //try監控區域
            System.out.println(a/b);
        }catch (ArithmeticException e){ //捕獲異常
            System.out.println("程序異常!變量b不能爲零");
        }finally { //處理善後異常
            System.out.println("finally");
        }
    }
}
  • 案例展示二:(多個異常捕獲)
package com.exception;
//異常捕獲要從小到大捕獲,不可從大到小,否則會覆蓋!
public class Demo01 {
    public static void main(String[] args) {
        int a = 1;
        int b = 0;
        try { //try監控區域
            System.out.println(a/b);
        }catch (Error e){
            System.out.println("Error");
        }catch (Exception e){
            System.out.println("Exception");
        }catch (Throwable e){ //捕獲異常
            System.out.println("Throwable");
        }finally { //處理善後異常
            System.out.println("finally");
        }
    }
}

2 拋出異常

  • 注意throw 和throws的不同
package com.exception;

public class Demo01 {
    public static void main(String[] args) {
        try {
            new Demo01().test(1,0);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    //假設此方法中,處理不了這個異常,則在方法上拋出異常。
    public void test(int a, int b) throws ArithmeticException{
        if (b==0){ //注意throw和throws的區別
            throw new ArithmeticException();//主動拋出異常,一般用在方法中
        }
    }
}

3 自定義異常

用戶可以自己定義異常,只需繼承Exception類即可。

案例展示:

package com.exception;

//自定義異常類:接收數據+打印異常信息
public class MyException extends Exception{

    //傳遞數組:若該數字大於10,則拋出異常
    private int detail;

    public MyException(int a) {
        this.detail = a;
    }

    //toString:異常的打印信息
    @Override
    public String toString() {
        return "MyException{"+ detail +
                '}';
    }
}
package com.exception;
//測試類
public class Test {
    //可能會存在異常的方法

    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(20);
        } catch (MyException e) {
            System.out.println("MyException=>"+e);
        }
    }
}

Conclusion:

  • 處理運行時異常時,採用邏輯去合理規避同時輔助try-catch處理。
  • 在多重catch塊後面,可以加一個catch(Exception)來處理可能遺漏的異常。
  • 對於不確定代碼,也可以加try-catch。
  • 儘量添加finally語句快去釋放佔用的資源。IO~ Scanner~

寫在最後

出現在別人的生活裏要想一份禮物!

To Demut and Dottie!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章