从finally块返回时Java的奇怪行为

从finally块返回时Java的奇怪行为,第1张

从finally块返回时Java的奇怪行为

毕竟,递增两次被调用两次。

是的,但是返回值是 第二次调用 之前 确定的。

返回的值由该 时间点在 return语句中的表达式求值确定,而不是“仅在执行离开方法之前”。

从JLS的14.17节开始:

一个带有expression的return语句试图将控制权转移到包含它的方法的调用者;expression的值成为方法调用的值。更准确地说,
执行这种return语句首先会评估expression
。如果对表达式的求值由于某种原因而突然完成,则return语句由于该原因而突然完成。如果对表达式的求值正常完成,产生一个值V,则return语句突然完成,原因是返回值为V的返回值。

然后
根据JLS的14.20.2节,将
执行转移到该

finally
块。但是,这不会重新评估return语句中的表达式。

如果您的finally块是:

finally { return increment(); }

那么新的返回值将是该方法的最终结果(根据14.20.2节)-但您并未这样做。



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5506461.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-13
下一篇2022-12-13

发表评论

登录后才能评论

评论列表(0条)

    保存