【Java】先return还是先finally
  ssbY8JrwAR4j 2023年11月01日 55 0

之前调试只发现有的方法执行完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的在业务上的使用场景其实并不多,此处解释为了方便源码调试时的理解

 

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

上一篇: IO流 下一篇: 函数式编程:Lambda 表达式
  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  2Vtxr3XfwhHq   2024年05月17日   55   0   0 Java
  Tnh5bgG19sRf   2024年05月20日   114   0   0 Java
  8s1LUHPryisj   2024年05月17日   49   0   0 Java
  aRSRdgycpgWt   2024年05月17日   47   0   0 Java
ssbY8JrwAR4j