finally快中语句肯定执行,finally块后的语句视情况而定:若是catch中截获异常或者有异常抛出,则不执行,这也不完全,例如下边的例子: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
提交
取消