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


1.概述

1.1異常體系

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

image-20201117154213267

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.測試類

image-20201117152240157

可以看到處理方式

image-20201117152030633

2.2 非受檢異常

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

非受檢異常繼承於RuntimeException

A.異常類
public class MyException extends RuntimeException{

    //自定義異常通常實現兩個構造器
    //一個是默認的構造器,另一個是帶有詳細信息的構造器.
    public MyException() {
    }

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

image-20201117152423983

3.總結

捕獲異常要關注它是哪個方法拋出來的

當我們這個方法拋出了一個受檢異常后,就明確的告訴了方法的調用者,你必須得處理我這個異常.

看看這個:fdsfdsfwefwsadsadasdasdasdasdeException

???

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

  • 不知道

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

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

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

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

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

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

結果

我直接給你全部捕獲


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM