java基礎之異常補充說明
阿新 • • 發佈:2022-03-28
異常補充說明:
異常補充
目錄1、為什麼需要異常
沒有學習異常之前
sout(打錯錯誤資訊)
// 讓程式終止,防止繼續向下執行
return;
而現在有了異常之後的使用方式:
// 在這裡來列印異常終止資訊,所以需要我們在類中定義一個屬性說明
throw new XXXException("異常終止資訊");
能夠終止程式執行,並丟擲對應的資訊。相對於原始資訊來說,這種更有自己的選擇性。
異常:列印問題、終止程式繼續向下執行,將錯誤拋給呼叫者
如果不對程式來進行捕捉,那麼將會導致程式的健壯性;
2、異常分類
異常也是一個物件,編譯時異常和執行時異常
對於編譯時異常來說,在程式碼編寫階段,將異常丟擲去,讓開發人員知道這裡可能會有問題,需要來做對應的處理;
執行時異常!將程式碼中的問題丟擲,這裡通常是程式碼邏輯不嚴謹導致的,通常需要提升開發人員的功力。
那麼關於選擇編譯時異常還是執行時異常,通常根據個人選擇來進行判斷:
我的選擇是:如果是強制性的要求並且是內部會使用到的工具類等等,使用編譯時異常;如果是不滿足程式執行的條件的,丟擲執行時異常。
3、JDK8新特性
JDK8新特性
可以在catch程式碼塊中書寫
catch(AException a | BException b | CException c)
4、自定義異常
參考NullPointerException、FileNotFoundException等定義方式
在類中直接提供無參構造和帶異常訊息的有參構造方法
如下所示:
public class MyException extends RuntimeException{ private String msg; public MyException() { } public MyException(String msg) { super(msg); } public static void main(String[] args) { MyException myException = new MyException("我自己定義的異常"); // 輸出異常物件 myException.printStackTrace(); // 獲取得到異常的簡簡訊息 System.out.println(myException.getMessage()); } }
檢視控制檯輸出結果:
com.guang.exception.MyException: 我自己定義的異常
at com.guang.exception.MyException.main(MyException.java:14)
我自己定義的異常
5、finally補充說明
在java中首先明確兩個規則:
A:程式的順序執行,程式一定是按照從上到下的邏輯來進行執行的;
B:return語句一旦執行,整個方法必然結束;
那麼看一下對應的案例:
public class MyException extends RuntimeException{
private String msg;
public MyException() {
}
public MyException(String msg) {
super(msg);
}
public static void main(String[] args) {
MyException myException = new MyException();
int show1 = myException.show1();
System.out.println("返回的結果是:"+show1);
int show2 = myException.show2();
System.out.println("返回的結果是:"+show2);
}
public int show1(){
int i = 10;
try {
return i;
}finally {
i++;
return i;
}
}
public int show2(){
int i = 10;
try {
return i;
}finally {
i++;
}
}
}
因為加了return,導致的結果就不一樣了。
對應的輸出結果是:
返回的結果是:11
返回的結果是:10