更新時間:2021-11-11 來源:黑馬程序員 瀏覽量:
Java中定義了大量的異常類,雖然這些異常類可以描述編程時出現(xiàn)的大部分異常情況,但是在程序開發(fā)中有時可能需要描述程序中特有的異常情況,例如在設計divide()方法時不允許被除數(shù)為負數(shù)。為了解決這樣的問題,Java允許用戶自定義異常,但自定義的異常類必須繼承自Exception或其子類。接下來通過一個案例來學習自定義異常的創(chuàng)建,如例4-35所示。
例4-35 DivideByMinusException.java
//下面的代碼是自定義一個異常類繼承自 Except ion public DivideByMinusException extends Exception public DivideByMinusException (){ super () //調(diào)用Exception無參的構(gòu)造方法 } public DivideByMinusException (String message){ //調(diào)用 Exceptlon有參的構(gòu)造方法 } }
在實際開發(fā)中,如果沒有特殊的要求,自定義的異常類只需繼承Exception類,在構(gòu)造方法中使用super()語句調(diào)用Exception的構(gòu)造方法即可。
既然自定義了異常,那么該如何使用呢?這時就需要用到throw關(guān)鍵字,在程序指定位置通過throw關(guān)鍵字拋出自定義的異常對象,然后對拋出的異常進行異常處理。
接下來重新對例4-33中的divide()方法進行改寫,在divide()方法中判斷被除數(shù)是否為負數(shù),如果為負數(shù),就是用throw關(guān)鍵字向調(diào)用者拋出自定義的DivideByMinusException異常對象,如例4-36所示。
例4-36 Example36.java
public class Exanple36 ( //下面的方法實現(xiàn)了兩個整數(shù)相除 public static int divide(int x,int y) throws DivideByMinuaException{ if (y ==0){ //使用throw關(guān)鍵字聲明異常對象 throw new DivideByMinuaException("除數(shù)是0") } int result. =x / yL; //定義一個變量resulc記錄兩個散相除的結(jié)果 return result; //將結(jié)果返回 publlc static void main(String[] args) { try { int result =divide (4, 0); System.out.println(result); } catch (DivideByMinuaException e) { Syatem.out.println(“捕獲的異常信息為:" +e.getMesaage()): } } }
運行結(jié)果如下圖所示:
圖4-40 例4-36運行結(jié)果
例4-36中,divide()方法通過邏輯判斷對除法運算的除數(shù)是否為0進行了判斷,如果除數(shù)為0就使用throw關(guān)鍵字拋出自定義的DivideByMinusException異常對象,然后通過throws關(guān)鍵字拋出異常,并在最后通過try…catch語句捕獲異常。從圖4-40可以看出,程序執(zhí)行后判斷出除數(shù)為0,拋出了指定的異常信息。