java中finally一定运行_Java中finally一定会执行吗?

有关finally会不会一定执行的问题,本来想写篇专门的博客,但是看到网上有人已经写的非常清楚,所以就拿过了给大家参考下!

一:finally里的语句一定会执行吗?

二:有如下形式的语句

Java代码

0818b9ca8b590ca3270a3433284dd417.png

try{

return 5;

}catch(Exception e){

e.printStackTrace();

}finally{

System.out.println("会执行嘛?");

}

这样的代码块放在一个方法里,finally里的语句还会执行吗?如果会是在return语句之前执行还是之后执行?

我当时知道finally里的语句是一定会执行的,可是如果按照代码的执行顺序似乎应该return语句先执行,可是一执行return语句这个方法就会结束,所以我答曰:finally里的语句在return之前执行。

回去之后做了一个测试

Java代码

0818b9ca8b590ca3270a3433284dd417.png

public class ReturnTest {

public static int testFinal(){

try{

return 5;

}catch(Exception e){

e.printStackTrace();

}finally{

System.out.println("会执行嘛?");

}

return 0;

}

public static void main(String args[]){

System.out.println(testFinal());

}

}

最后输出:

会执行嘛?

5

这样可以发现finally里的语句是会先执行的

Debug后发现的情况是:先执行finally;在执行return 5;语句,最终没有执行return 0;因为return 5的时候方法已经结束了,可是没有return 0;这条语句会报错。该如何解释?不解啊

参考一:

在 try 中 或 catch 中遇到 return 就会转入 finally

参考二:

根据java规范:在try-catch-finally中,如果try-finally或者catch-finally中都有return,则两个return语句都执行并且最终

返回到调用者那里的是finally中return的值;而如果finally中没有return,则理所当然的返回的是try或者catch中return的值,但是

finally中的代码是必须要执行的,而且是在return前执行,除非碰到exit()。

本人也做了个小测试:

public class FinalBoy {

public static int test() {

try {

System.out.println("执行try");

return 5;

} catch (Exception e) {

// TODO: handle exception

System.out.println("执行catch");

} finally {

System.out.println("执行finally!");

}

return -1;

}

public static void main(String[] args) {

System.out.println(test());

}

}

结果:

执行try

执行finally!

5显然先执行try,然后finally,然后try里的return 。

另一种写法:

public class FinalBoy {

public static int test() {

try {

System.out.println("执行try");

return 5;

} catch (Exception e) {

// TODO: handle exception

System.out.println("执行catch");

} finally {

System.out.println("执行finally!");

return 0;//这里会报finally block does not complete normally

}

//return -1; /*这里不能写return ,执行不到*/

}

public static void main(String[] args) {

System.out.println(test());

}

}

为什么finally里的return 会报finally block does not complete normally呢?因为在程序中,return 仅执行一次!要不你在try里面return,要不你在程序结束时return ,finally会在return前执行,它的设计主要是用来关闭一些开关的。

结果:

执行try

执行finally!

0

当然是执行finally里的return,如果finally里没有return,是要执行try里面的return的。代码规范问题,实际这里并不需要太多讨论。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值