JAVA中的try-catch-finally块的return特殊情况

预备知识:

try-catch-finally块应该和if-else语句一样,看成一条语句,只是if-else是两个块,而try-catch-finally是三个块。

一、try块

作用:捕捉程序会出现的异常。
在try块中加入return 语句;
在这里插入图片描述
当try执行了当中的语句后 没有捕捉到异常时,就会执行finally块,等finally块执行完后,因为try-catch-finally是一条语句,所以就会回到try 块中进行return的出栈返回,try块中的 i 不受finally块中 i 的影响,所以结果就是1,2,1.

2、catch块

在这里插入图片描述
try块在1/0的时候捕捉到了异常,进行了输出后就跳入了catch块,catch块中的i++;不受try-finally块中 i 值的影响,然后输出。
执行完catch块后,继续往下执行finally块,但是try 和 finally块都没有返回,所以就将catch块中的 i 进行了出栈,所以结果就是1,2,3,2;


3、finally块


在这里插入图片描述
无论try 是否捕捉到异常、无论catch块是否执行,finally块都会执行,除非前面的代码中出现了System.exit(1);这条语句才不会执行finally块,所以这里就将finally块中的return进行了出栈返回操作。所以结果就是1,2,2。

4、所有块都加入return ;

在这里插入图片描述
这里就会比前面的几个情况麻烦一点,但是这里还是本质上没有改变了,就是看执行到那个块并且这个块中又有return 语句
上图,执行了try后,因为无论是否有异常都需要执行finally块,所以就进入finally块进行执行,然后finally块又有return ,所以在finally块执行到return时就在这里返回了,这个return 是try-catch-finally块这一条语句的最后一个return ,所以从这里返回。
大家可以参考一下if-else的两个块中加入return 的情况,这里这两种语句的思想是一样的。

5、总结

1、无论是否有异常,只要前面的语句中没有出现System.exit(1); finally语句块都会执行。
2、try-catch-finally语句中的return 语句,主要看return在那个块中,并且是否是最后一个return,
如果return出现在try语句,其他两个块中没有return,则就算执行了finally块,也就跳回try块中返回当中的值,值不受finally影响。
如果return出现在catch语句,其他两个块中没有return,则就算执行了try-finally块,也就跳回catch块中返回当中的值,值不受try-finally影响。
如果finally块中有返回,则执行完try-catch中的运算后再进行finally块的运算就直接返回。

原著:风轻仰

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值