異常之Java7捕獲多種型別異常
在Java7之前,每個catch塊只能捕獲一種型別的異常,但從Java7開始一個catch可以捕獲多種型別的異常。
使用一個catch塊捕獲多種型別的異常時需要注意如下兩個地方:
1>捕獲多種型別的異常時,多種異常型別之間用豎線(|)隔開。
2>捕獲多種型別的異常時,異常變數有隱式的final修飾,因此程式不能對異常變數重新賦值。
示例:
public class MultiExceptionTest{
public static void main(String[ ] args){
try{
int a = Integer.parseInt(args[0]);
int b = Integer.parseInt(args[1]);
int c = a / b;
System.out.println("輸入兩數相除結果:" + c);
}catch(IndexOutOfBoundsException | NumberFormatException | ArithemticException ie){//(1)
System.out.println(“程式發生了陣列越界、數字格式異常、算數異常之一”);
//捕獲多異常時,異常變數預設有final修飾
//所以下面程式碼有錯
ie = new ArithmeticException("test");//(2)
}catch(Exception e){
System.out.println("未知異常");
//捕獲一種型別的未知異常時,異常變數沒有final修飾
//所以下面程式碼完全正確
e = new RuntimeException("test");//(3)
}
}
}
上面程式中1處使用了IndexOutOfBoundsException | NumberFormatException | ArithemticException來定義異常型別,這就表明該catch塊可以同時捕獲這三種類型的異常。捕獲多種型別的異常時,異常變數使用隱式的final修飾,因此上邊的2處程式碼會產生編譯錯誤;捕獲一種型別的異常時,異常變數沒有final修飾,因此上面程式中3處程式碼完全正確。