Java面试题 try.catch语句中存在return和finally中语句的执行顺序?

Java中的try.catch语句中的finally和return同时存在时,finally语句是否会执行,若执行,那么执行顺序是什么?

结论:

  1. 不管有没有异常,finally块中代码都会执行;
  2. 当try.catch中有return时,finally仍然会执行;
  3. finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值。
  4. 在执行时,是return语句先把返回值写入内存中,然后停下来等待finally语句块执行完,return再执行后面的一段。
  5. 至于返回值到底变不变,当finally调用任何可变的API,会修改返回值;当finally调用任何的不可变的API,对返回值没有影响。

举例:

1、try{}catch(){}return;

按照正常的顺序执行并返回。

2、try{return;}catch(){}finally{}return;

程序执行try代码块中return之前的代码,再执行finally块,最后执行try中的return,finally后的return将不再执行。

3、try{ } catch(){return;} finally{} return;

程序执行try代码块中的代码,

  • 没有异常:执行finally中的代码,再执行return。
  • 发生异常:执行catch中return之前的代码,再执行finally语句中的代码,再执行catch中的return,finally后的return将不再执行。

4、try{return;}catch(){} finally{return;}

程序执行try代码块之前的代码,再执行finally语句块,因为finally中有return,所以try中的return将不再执行。

5、try{} catch(){return;}finally{return;}

程序执行try代码块中的代码,

  • 没有异常,直接执行finally并执行finally中的return执行结束;
  • 发生异常,执行catch代码块中retrun之前的代码,再执行finally块中的代码,由于finally中有return则直接返回,所以catch中的return将不再执行。

6、try{ return;}catch(){return;} finally{return;}

程序执行try代码块中return之前的代码,

  • 没有异常:执行finally中的语句,由于finally中有return则直接返回结束程序。
  • 发生异常:执行catch块中return中的语句,再执行finally语句,由于finally中有return则直接返回结束程序。

最终结论:任何try或者catch中的return语句之前,如果finally存在的话,都会先执行finally语句,如果finally中有return语句,那么程序就结束了。

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你好像很好吃a

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值