1. 程式人生 > 其它 >異常——JavaSE基礎

異常——JavaSE基礎

異常

異常的分類

  • 檢查性異常:
  • 執行時異常:可能被程式設計師避免的異常,執行時異常可以在編譯時被忽略
  • 錯誤ERROR:錯誤不是異常

在Java中把異常當作物件來處理,並且定義了一個基類java.lang.Throwable作為所有異常的超類

在Java API中已經定義了許多異常類,這些異常類分為兩大類,錯誤Error異常Exception

public class Demo02 {
    public static void main(String[] args) {
        
        try {
            System.out.println(10 / 0);
        }catch (ArithmeticException e){
            System.out.println("丟擲異常!");
            System.out.println(e.getMessage());
            e.printStackTrace(); // 列印錯誤的棧資訊
        }finally {
            System.out.println("finally語句塊一般用於釋放佔用的資源");
        }
    }
    
}

使用Throwable捕獲所有異常或錯誤

可以使用多層catch捕獲遺漏的異常

public class Demo02 {
    public static void main(String[] args) {

        try {
            //System.out.println(10 / 0);
            int[] a = new int[10];
            a[10] = 1;
        }catch (ArithmeticException e){  // 捕獲算術異常
            System.out.println("丟擲異常!");
            System.out.println(e.getMessage());
            e.printStackTrace(); // 列印錯誤的棧資訊
        }catch (Exception e){ // 捕獲所有異常,用於捕獲遺漏的異常
            System.out.println(e);
        }finally {
            System.out.println("finally");
        }
    }

}

自定義異常

除了可以使用Java異常類中自帶的異常,也可以繼承Exception類自定義一個異常

自定義異常

public class MyException extends Exception{

    private int detail;

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

    @Override
    public String toString() {
        return "MyException{" +
                "detail=" + detail +
                '}';
    }
}

測試類

public class Demo03 {

    public static void main(String[] args) {
        try{
            demo03(11); // 修改這裡的引數為小於等於10的數,則不會丟擲異常
        }catch (MyException e){
            System.out.println("MyException=>" + e);
        }
    }

    static void demo03(int a) throws MyException{

        System.out.println("傳遞的引數為:" + a);

        // 如果a > 10則丟擲異常,否則不丟擲
        if (a > 10) {
            throw new MyException(a);
        }

        System.out.println("OK");
    }
}