栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

从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节)-但您并未这样做。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/515402.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号