00015.02 finally与return混用

前言

finally下的代码 是一定会执行的

一、finally与return的纠缠不清

在这里插入图片描述

(1)正常逻辑,如果出现异常

看如下代码,请问返回的是什么值?
在这里插入图片描述
讲道理,按照正常逻辑应该是 返回“异常”
在这里插入图片描述

(2)如果再加个finally,也return 会返回什么呢?

在这里插入图片描述
很容易被误导,以为会是“正数”,但是仔细想想,其实不对
在这里插入图片描述

如果finally中有return 那么就从finally块的return回去

在这里插入图片描述
在这里插入图片描述

二、如果没有return

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
你敢想象是这样的结果吗?
在这里插入图片描述
理解一下:return 是最终
在这里插入图片描述

再看看数字计算的例子
在这里插入图片描述
我们分析一下,这个地方输出是什么,
(1)不管try中是否发生异常,也不管catch是否可以捕获异常,也无论try或catch中是否有return。
finally中的代码都必须执行
(2)如果finally中有return,就从finally块的的return回去。
(3)如果finally中没有return,那么先把try或catch中该执行的执行完,
在return结束当前方法之前,先走一下finally,然后回去结束当前方法

按照我们上面的逻辑应该输出是
先输出 “finally”
然后输出 “exception”
最后输出 “0”

其中让人纠结的就是最后返回的是0 还是30 一定要注意
在这里插入图片描述
很容易出错,我之前的思路就错了,一定要注意
第二,为什么最后返回的的0 不是30 需要理解一下这句话
如果finally中没有return,那么先把try或catch中该执行的执行完,
在return结束当前方法之前,先走一下finally,然后回去结束当前方法

该执行的执行完 什么叫该执行的,该执行的是包括了把返回值的结果放到要带回调用处的位置,意思就是已经return了,如果按照上面的例子来说,就是已经把0返回去了,后面你怎么改都没用了

总结

(1)不管try中是否发生异常,也不管catch是否可以捕获异常,也无论try或catch中是否有return。
finally中的代码都必须执行
(2)如果finally中有return,就从finally块的的return回去。
(3)如果finally中没有return,那么先把try或catch中该执行的执行完,
在return结束当前方法之前,先走一下finally,然后回去结束当前方法

结论,如果finally中没有return,finally中的代码不影响返回值。

实际开发当做,不允许在finally当中return

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值