1. 程式人生 > 實用技巧 >Java中的異常處理2_受檢異常與非受檢異常

Java中的異常處理2_受檢異常與非受檢異常

1.概述

1.1異常體系

所有異常都繼承自java.lang.Throwable,它有兩個直接的子類Error與Exception.

1.2受檢異常與非受檢異常

Java compiler要求所有的Exception 要麼被catch,要麼被throw,除非這是一個RuntimeExeption .

  • 受檢異常 checked exception

也就是說,通常的Exception一定要被處理,也即我們所說的

  • 非受檢異常 unchecked exception

而RuntimeException不強制要求處理,(當然你自己要處理也可以),所以我們稱為.

2.詳述

2.1 受檢異常

受檢異常是在編譯時期有編譯器檢測的異常,必須要處理異常.

繼承於Exception

A.異常類
public class MyException extends Exception{

    //自定義異常通常實現兩個構造器
    //一個是預設的構造器,另一個是帶有詳細資訊的構造器.
    public MyException() {
    }

    public MyException(String message) {
        super(message);
    }
}
B.測試類

可以看到處理方式

2.2 非受檢異常

非受檢異常是在執行時期的異常,即編譯器不會檢測異常,需要時也可以捕獲異常.

非受檢異常繼承於RuntimeException

A.異常類
public class MyException extends RuntimeException{

    //自定義異常通常實現兩個構造器
    //一個是預設的構造器,另一個是帶有詳細資訊的構造器.
    public MyException() {
    }

    public MyException(String message) {
        super(message);
    }
}
B.測試類

3.總結

當我們這個方法丟擲了一個受檢異常後,就明確的告訴了方法的呼叫者,你必須得處理我這個異常.

看看這個:fdsfdsfwefwsadsadasdasdasdasdeException

???

  • 如果丟擲的異常我們不熟悉,例如發現是上面這個,又強制要求我們處理,那怎麼處理?

  • 不知道

索性就不要求強制處理唄,變成一個非受檢異常好了,寫程式碼的時候編譯器就不會檢查你,所以沒有劃紅線來噁心你.

非受檢異常(執行時異常)如果不處理,寫程式碼的時候(編譯)不報錯,而是在執行時報錯.

  • 啊那執行時報錯不是更頭疼?

  • 咋的交給你好像你能處理一樣.

記得RuntimeException是繼承與Exception的,所以可以這樣.

public static void main(String[] args) {
    try {
        divisionSome(5, 0);
    } catch (Exception e) {
        System.out.println("我直接給你全部捕獲");
    }
}

結果

我直接給你全部捕獲