为了账号安全,请及时绑定邮箱和手机立即绑定

java finally块后的语句是否要执行

java finally块后的语句是否要执行

喵喵时光机 2019-01-18 22:20:46
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后面的语句!");
    }
}

  1. main方法向test方法中传递了a=0
  2. 由于除数为0,则抛出算数异常
  3. 由于题主代码中捕获了异常,则进入到catch块中,则打印第一行结果
  4. 执行完catch块后则进入到finally中则执行finally语句,则打印底二行结果
  5. 由于异常被catch块捕获了之后,则表示程序还是可以正常的执行的,则执行line2的代码,打印第句话
  6. main函数向test方法中传递a=1
  7. 由于除数不为0,则正常执行。输出后面的结果。
总结:finally后面的语句这个分几种情况
  1. 异常被捕获:finally代码正常执行并且finally后面正常的代码还是可以继续执行
  2. 异常未被捕获:finally代码正常执行,并将异常向上一层调用方抛出,但是finally后面正常的代码不再执行
查看完整回答
反对 回复 2019-02-12
  • 1 回答
  • 0 关注
  • 649 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号