异常处理关于return语句的执行顺序注意事项
Posted chenloveslife
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了异常处理关于return语句的执行顺序注意事项相关的知识,希望对你有一定的参考价值。
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语句的执行顺序注意事项的主要内容,如果未能解决你的问题,请参考以下文章
java try catch finally return执行顺序