Java拾遺系列之Java基礎-異常
一、概述
Java異常分為兩類,一個是錯誤,一個異常。異常和錯誤的區別是,異常是可以被處理的,而錯誤是沒法處理的。所有異常的超類只有Throwable一個,Throwable下分為異常(Exception)和錯誤(Error)兩個子類。每個子類又有更具體的子類,主要目的是在拋出異常時,能夠準確描述出具問題。
二、錯誤
對于所有的編譯時期的錯誤以及系統錯誤都是通過Error拋出的。這些錯誤表示故障發生于虛擬機自身、或者發生在虛擬機試圖執行應用時,如Java虛擬機運行錯誤(Virtual MachineError)、類定義錯誤(NoClassDefFoundError)等。這些錯誤是不可查的,因為它們在應用程序的控制和處理能力之 外,而且絕大多數是程序運行時不允許出現的狀況。對于設計合理的應用程序來說,即使確實發生了錯誤,本質上也不應該試圖去處理它所引起的異常狀況。在 Java中,錯誤通過Error的子類描述。
三、異常
異常是程序開發接觸最多的異常,分為IO異常和運行時異常。比如NullPointerException、IndexOutOfBoundsException,這些異常是我們可以處理的異常。
四、自定義異常
在某些特殊場景,java自帶的異常,可能無法表述清晰的異常,需要我們自定義,以便其它程序能夠正確捕捉和處理異常。實現自定異常只需要繼承Exception類即可,如下:
public class MyException extends Exception {
//無參構造方法
public MyException(){
super();
}
//有參的構造方法
public MyException(String message){
super(message);
}
// 用指定的詳細信息和原因構造一個新的異常
public MyException(String message, Throwable cause){
super(message,cause);
}
//用指定原因構造一個新的異常
public MyException(Throwable cause) {
super(cause);
}
}
五、異常的處理
異常的處理使用try{}catch(){}fimally{}進行,如下:
try{
// 程序代碼
}catch(異常類型1 異常的變量名1){
// 程序代碼
}catch(異常類型2 異常的變量名2){
// 程序代碼
}finally{
// 程序代碼
}
其中catch也可以一次捕捉多個異常,如下:
try{
// 程序代碼
}catch(異常類型1|異常類型2 異常的變量名1){
// 程序代碼
}finally{
// 程序代碼
}
注意最后的finally,無論實際是否出現異常,finally內代碼一定會執行。