1. 程式人生 > >異常(try……catch……finally、throws和throw的區別、自定義異常)

異常(try……catch……finally、throws和throw的區別、自定義異常)

一、什麼是異常

什麼是異常?
認識異常:導致程式中斷執行的。
例如我們編寫了一個除法程式,除數是不可以為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;//返回結果
    }
}