Java finally语句到底是在return之前还是之后执行?

详细文章内容请进入
《Java finally语句到底是在return之前还是之后执行?—第一篇》
《Java finally语句到底是在return之前还是之后执行?—第二篇》
《try catch finally小结》

《Java finally语句到底是在return之前还是之后执行?—第一篇》通过执行代码来验证了try/catch/finally中包含return的各种情况,得出的结论是:

  1. finally语句在try和catch语句中的return执行后、返回前执行;
  2. 若finally语句中没有return,则其执行结果不影响try和catch中已确定的返回值;
  3. 若finally语句中有return,则其执行后的结果会直接返回。

《Java finally语句到底是在return之前还是之后执行?—第二篇》指出,当try或者catch的代码在运行的时候,JVM退出了。那么finally语句块就不会执行。同样,如果线程在运行try或者catch的代码时被中断了或者被杀死了(killed),那么finally语句可能也不会执行了,即使整个运用还会继续执行。

The only times finally won’t be called are: if you call System.exit() or another thread interrupts current one (via the interrupt method) or if the JVM crashes first

另外,在 java的语言规范有讲到,如果在try语句里有return语句,finally语句还是会执行。它会在把控制权转移到该方法的调用者或者构造器前执行finally语句。也就是说,使用return语句把控制权转移给其他的方法前会执行finally语句。

所以,finally语句不执行的两种情况为:
1). return语句在try之前,还没执行就返回了,当然不执行。
2). try语句中用了system.exit(0)强制退出JVM,暴力退出当然也不会执行。

《try catch finally小结》
finally块:无论是否捕获或处理异常,finally块里的语句都会被执行。当在try块或catch块中遇到return语句时,finally语句块将在方法返回之前被执行。在以下4种特殊情况下,finally块不会被执行:

1)在finally语句块中发生了异常。
2)在前面的代码中用了System.exit()退出程序。
3)程序所在的线程死亡。
4)关闭CPU。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值