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("我直接給你全部捕獲");
}
}
結果
我直接給你全部捕獲