【Java】先return还是先finally

[复制链接]
发表于 2023-3-6 16:28:46 | 显示全部楼层 |阅读模式
之前调试只发现有的方法执行完return语句后再执行finally,但是没有细究
最近debug代码的时候发现,不同返回类型的方法,return和finally执行顺序竟然不一样
先看返回类型为void的执行顺序:


 
 继续执行:

 
 继续:

 
 发现执行顺序是:
try中代码->finally代码->try中的return,是先执行finally,再执行return
再看返回类型为int类型的执行顺序:


 
 继续执行:

 
 发现竟然直接到了return,继续:

 
 开始执行finally,执行顺序为:
try中代码->try中return->finally,而且此方法返回值依然为1,x=100会执行,但不会返回
原因:
void方法的return就是返回,return是方法的最后一步,当然先执行finally
int方法或其他有返回值的方法,return实际是将返回值赋值给一个匿名变量,并在最后返回前加载该变量到栈顶,然后执行返回,所以debug执行testx时,执行return x并不是直接返回,只是把x的值赋给了一个匿名变量
补充:
JDK 7之后提供了try with resource的方式,会在代码块执行完毕后执行Closeable的close方法,释放资源
所以finally的在业务上的使用场景其实并不多,此处解释为了方便源码调试时的理解
 


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
继续阅读请点击广告

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

×
登录参与点评抽奖,加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表