【本節目标】
通過閱讀本節内容,你将了解到catch塊中捕獲指定的異常時具有的風險,并學會使用多個catch捕獲多個異常的辦法來解決這個問題。
處理多個異常
很多時候在程式執行的過程之中可能會産生若幹個異常,那麼這種情況下也可以使用多個catch進行異常的捕獲。假設通過初始化的參數來進行兩個數學計算數字的設定。
public class JavaDemo{
public static void main(String args[]) {
System.out.println("【1】*****程式開始執行*****") ;
try {
int x = Integer.parseInt(args [0]) ;
int y = Integer.parseInt(args [1]) ;
System.out.println("【2】數學計算:" +(x / y)) ;
} catch (ArithmeticException e) {
e.printStackTrace() ;
}finally {
System.out.println("【F】不管是否出現異常,我都會執行。") ;
}
System.out.println("【3】*****程式執行完畢*****") ;
}
}
對于此時的程式就有可能産生三類異常:
-
【未處理】程式執行的時候沒有輸入初始化參數(java JavaDemo):
java.lang.ArrayIndexOutOfBoundsException;
程式執行結果:
圖一 沒有輸入初始化參數異常
-
【未處理】輸入時的資料不是數字(java JavaDemo a b):
java.lang.NumberFormatException;
圖二 輸入的資料不是數字異常
-
【已處理】輸入的被除數為0(java JavaDemo 10 0):
Java.lang.ArithmeticException;

圖三 已處理的被除數為0異常
現在即便有了異常處理語句,但是如果沒有正确的異常捕獲,那麼程式也會導緻中斷(finally的代碼依然執行),在這樣的情況下就必須進行多個異常的捕獲。
範例:修改程式代碼
public class JavaDemo{
public static void main(String args[]) {
System.out.println("【1】*****程式開始執行*****") ;
try {
int x = Integer.parseInt(args [0]) ;
int y = Integer.parseInt(args [1]) ;
System.out.println("【2】數學計算:" +(x / y)) ;
} catch (ArithmeticException e) {
e.printStackTrace() ;
}catch (NumberFormatException e) {
e.printStackTrace() ;
}catch (ArrayIndexOutOfBoundsException e) {
e.printStackTrace() ;
}finally {
System.out.println("【F】不管是否出現異常,我都會執行。") ;
}
System.out.println("【3】*****程式執行完畢*****") ;
}
}
此時開發者都已經明确的知道了有哪些異常了,那麼又何必非要用異常處理呢?直接進行判斷就可以了。
想學習更多的Java的課程嗎?從小白到大神,從入門到精通,更多精彩不容錯過!免費為您提供更多的學習資源。
本内容視訊來源于
阿裡雲大學 下一篇:知其是以然-剖析異常處理流程 | 帶你學《Java面向對象程式設計》之七十八 更多Java面向對象程式設計文章檢視此處