finally快中語句肯定執行,finally塊后的語句視情況而定:若是catch中截獲異?;蛘哂挟惓伋觯瑒t不執行,這也不完全,例如下邊的例子:package com.jessice.example;
public class test {
public static void main(String[] args) {
new FinallyTest().test(0);
System.out.println("------------------");
new FinallyTest().test(1);
}
}
class FinallyTest {
public void test(int a) {
try {
int i = 0 / a;
} catch (Exception ex) {
System.err.println("程序異常了!");
} finally {
System.out.println("執行finally!");
}
System.out.println("執行finally后面的語句!");
}
}
結果就是
程序異常了!執行finally!
執行finally后面的語句!
執行finally!執行finally后面的語句!
1 回答

長風秋雁
TA貢獻1757條經驗 獲得超7個贊
其實你如果理解了try,catch捕獲異常的說法你就知道了,我來給題主分析一下這個代碼的為啥會出現這個結果
1.程序異常了!
2.執行finally!
3.執行finally后面的語句!
4.執行finally!
5.執行finally后面的語句!
請注意,題主的代碼中
class FinallyTest {
public void test(int a) {
try {
int i = 0 / a;
//1.異常捕獲
} catch (Exception ex) {
System.err.println("程序異常了!");
} finally {
System.out.println("執行finally!");
}
//line2
System.out.println("執行finally后面的語句!");
}
}
- main方法向test方法中傳遞了a=0
- 由于除數為0,則拋出算數異常
- 由于題主代碼中捕獲了異常,則進入到catch塊中,則打印第一行結果
- 執行完catch塊后則進入到finally中則執行finally語句,則打印底二行結果
- 由于異常被catch塊捕獲了之后,則表示程序還是可以正常的執行的,則執行
line2
的代碼,打印第句話 - main函數向test方法中傳遞a=1
- 由于除數不為0,則正常執行。輸出后面的結果。
總結:finally后面的語句這個分幾種情況
- 異常被捕獲:finally代碼正常執行并且finally后面正常的代碼還是可以繼續執行
- 異常未被捕獲:finally代碼正常執行,并將異常向上一層調用方拋出,但是finally后面正常的代碼不再執行
添加回答
舉報
0/150
提交
取消