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