29、異常的巢狀和級聯
學習目標:
1、瞭解異常的巢狀的語法和作用
2、瞭解級聯捕獲異常的意義和語法
學習過程:
這節我們需要探討的問題是,如果我們需要try嘗試捕獲的異常不止一個,那麼我們需要如何處理呢?
一、分開捕獲或者巢狀使用
我們先看看下面這段程式碼:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
int div( int a, int b) {
main(String[] args) {
0 ;
|
在這段程式碼中有可能丟擲異常的有兩個地方,那麼我們應該如何處理呢。
1、當然我們可以分開捕獲。如下面的程式碼:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
|
2、我們還可以在try裡面巢狀的使用try語句。如下面程式碼所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
|
二、使用級聯捕獲異常
上面介紹的這兩種方法都不是好辦法,以為過多的使用try捕獲異常會影響程式的效率。所以我們推薦使用的是級聯捕獲異常。格式如下
try{
…...
}catch(ArrayIndexOutOfBoundsException e) {
……
} catch(ArithmeticException e) {
……
} catch(Exception e) {
……
}
注意:使用多重 catch 語句時,異常子類一定要位於異常父類之前。
所以以下這種方式是錯誤的。
try{
…...
} catch(Exception e) {
……
} catch(ArrayIndexOutOfBoundsException e) {
……
}
好,那麼我們可以修改上面的程式碼如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
|
由於多次的使用try或影響效率。所以我們如果碰到迴圈的時候,應該把try語句放到迴圈的外面,例如我們並不推薦你這樣寫程式碼:
1 2 3 4 5 6 7 8 9 10 11 12 |
|
你可以修改成為這樣:
1 2 3 4 5 6 7 8 9 10 11 |
|