1. 程式人生 > 其它 >筆記:捕獲異常/丟擲異常/自定義異常

筆記:捕獲異常/丟擲異常/自定義異常

捕獲異常

package com.Linz.method;

public class Test {
    public static void main(String[] args) {
        int a = 1;
        int b = 0;

        // try監控區域
        // try catch 區域是必須的
        // finally 區域不是必要的
        // catch可多個並用,但最大的異常要寫到最後面:從小到大
        try{
            System.out.println(a/b);
        }catch (ArithmeticException e){
            System.out.println("程式出現ArithmeticException異常,變數b不能為0");
        }finally {
            System.out.println("執行finally");
        }


        // IDEA快捷鍵:Ctrl + Alt + T
        try {
            System.out.println(a/b);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

丟擲異常

package com.Linz.method;

public class Test {

    //假設這個方法中,處理不了這個異常,方法上丟擲異常
    public void test(int a,int b) throws ArithmeticException{

        //丟擲異常關鍵字 throw/throws

        if (b==0){
            //throw 主動丟擲異常,在控制檯中輸出異常  一般在方法中使用
            throw new ArithmeticException();
        }
    }


    public static void main(String[] args) {
        new Test().test(1,0);
    }


}

自定義異常

package com.Linz.method;

//自定義的異常類
public class MyExcption extends Exception{
    //傳遞數字 > 10 ;

    private int detail;

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

    //toString 異常的列印資訊
    @Override
    public String toString() {
        return "MyExcption{" + "detail=" + detail + '}';
    }
}
package com.Linz.method;

public class Test {

    //可能會存在異常的方法

    public static void test(int a) throws MyExcption{
        System.out.println("傳遞的引數為"+a);
        if (a>10){
            throw new MyExcption(a);
        }
        System.out.println("OK");
    }

    public static void main(String[] args) {
        try {
            test(11);
        } catch (MyExcption e) {
            System.out.println("MyException=>"+e);
        }
    }

}

注意

  • 處理執行時異常時,採用邏輯去合理規避同時輔助try-catch處理

  • 在多重catch塊後面,可以加一個catch(Exception)來處理可能會被遺漏的異常

  • 對於不確定的程式碼,也可以加上try-catch,處理潛在的異常

  • 儘量去處理異常,切忌只是簡單的呼叫printStackTrace()去列印輸出

  • 具體如何處理異常,要根據不同的業務需求和異常型別去決定

  • 儘量新增finally語句去釋放佔用的資源