finally快中語句肯定執(zhí)行,finally塊后的語句視情況而定:若是catch中截獲異?;蛘哂挟惓伋?,則不執(zhí)行,這也不完全,例如下邊的例子: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("執(zhí)行finally!");
}
System.out.println("執(zhí)行finally后面的語句!");
}
}
結果就是
程序異常了!執(zhí)行finally!
執(zhí)行finally后面的語句!
執(zhí)行finally!執(zhí)行finally后面的語句!
1 回答

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