異常(try……catch……finally、throws和throw的區別、自定義異常)
阿新 • • 發佈:2019-02-17
一、什麼是異常
什麼是異常?
認識異常:導致程式中斷執行的。
例如我們編寫了一個除法程式,除數是不可以為0的,但是我們一開始沒有做這個規定,如果執行的過程中出現了0,那麼程式就會異常結束。
二、try……catch和finally
出現異常的語句要怎麼處理?
我們使用try……catch和finally語句對出現異常的語句進行處理。finally不是必要的,因為程式出現異常會中斷執行,如果想繼續執行異常下面的程式碼就需要放入finally語句中,這樣才會執行剩下的語句。
格式如下:
try{
//可能出現異常的語句
}catch(Exception e){//Exception 代表著catch可以接收的引數型別
//對異常的處理
//return;
}finally{
//這是無論是否出現異常都會執行的程式碼,即使上面註釋的return語句結束了該方法,finally程式碼塊還是會執行
}
三、throws、throw關鍵字
throws關鍵字作用:定義方法時宣告該方法不處理異常,拋給呼叫者處理。
就是說你寫了一個有異常的方法,但是你沒有對這個方法進行處理,而是用throws關鍵字將該方法標出來,就像是在對呼叫他的人說:這是個有異常的方法,你需要處理。
throws關鍵字的格式
public void 方法名( ) throws Exception{
//有異常的程式碼塊
}
例如你在主方法中呼叫了一個唄throws宣告的方法,你有兩個選擇:
①、要麼對其進行處理
②、要麼繼續使用throws丟擲(如果丟擲,這樣程式可以執行,但是一旦出現異常,程式就會終止)。
throw關鍵字:
throws是說有這種可能發生(例如除數為0),但執行throw則一定丟擲了某種異常。
throw丟擲異常的時候是直接丟擲例項化物件
try {
throw new Exception("例項化異常");
} catch (Exception a) {
System.out.println(a);
}
該段程式碼的結果是:java.lang.Exception: 例項化異常
四、自定義異常
自定義異常必須是繼承自Exception或者其子類。
若無特殊要求,自定義異常只需要繼承Exception類,構造方法中只需要使用super()語句呼叫Exception的構造方法即可。
//自定義一個異常類
class zidingyi extends Exception{
public zidingyi () {
super();
}
public zidingyi (String a) {
super(a);
}
}
//測試類
public class Test04 {
public static void main(String[] args) {
try {
int result =divide(4,-2);
System.out.println(result);
} catch (zidingyi e) { //對捕獲的異常進行處理
System.out.println(e.getMessage()); //列印捕獲到的異常資訊
}
}
//自定義異常的方法,使用throws關鍵字丟擲
public static int divide(int x,int y) throws zidingyi {
if (y<0) {
//使用throw關鍵字丟擲例項物件
throw new zidingyi("被除數是負數");
}
int result=x/y;//記錄結果
return result;//返回結果
}
}