码迷,mamicode.com
首页 > 其他好文 > 详细

异常处理关于return语句的执行顺序注意事项

时间:2018-04-21 16:15:08      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:font   目的   finally   程序   一个   返回   try   第一步   注意事项   

1. 当try语句块中有return语句,finally语句块中没有return语句时:

  try块中的return语句会先返回并保存,然后执行finally语句,就算finally语句块中修改了要返回的值也仍然改变不了最后真实返回的值,执行完毕后把保存的值最终返回。我们先来了解return原理:对于return x;先执行x,x也是一个表达式,这个表达式只有一个操作数,会执行将变量x从局部变量区复制到操作数栈顶的指令,然后执行return,返回操作数栈顶的值。因此return x实际返回的是return指令执行时,x在操作数栈顶的一个快照或者叫副本,而不是x这个值。然后从底层来了解执行原理:在第一步try执行完毕后,整个方法的返回值就已经确定了,由于还要执行finally代码块,因此程序会将返回值暂存在局部变量区,腾出操作数栈用来执行finally语句块中代码,等finally执行完毕,再将暂存的返回值又复制回操作数栈顶。所以无论finally语句块中执行了什么操作,都无法影响返回值,所以试图在finally语句块中修改返回值是徒劳的。因此,finally语句块设计出来的目的只是为了让方法执行一些重要的收尾工作,而不是用来计算返回值的。

2. 当try和finally语句块中都有return语句时:

  虽然try块中返回值在执行finally代码块之前被保存了,但是最终执行的是finally代码块的return语句,try块中的return语句不再执行。

3. 当只finally语句块中有return语句时:

  按顺序执行。

4. catch语句块和try语句块类似。

异常处理关于return语句的执行顺序注意事项

标签:font   目的   finally   程序   一个   返回   try   第一步   注意事项   

原文地址:https://www.cnblogs.com/chenloveslife/p/8901423.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!