你真的了解try{ return }finally{}中的return吗?
来源:互联网 发布:美容保健品 知乎 编辑:程序博客网 时间:2024/06/16 16:12
谁能给我我解释一下这段程序的结果为什么是2而不是3?
class Test { public int aaa() { int x = 1; try { return ++x; } catch (Exception e) { } finally { ++x; } return x; } public static void main(String[] args) { Test t = new Test(); int y = t.aaa(); System.out.println(y); }}
解答:
如果try语句里有return,那么代码的行为如下:
- 如果有返回值,就把返回值保存到局部变量中。
- 执行JSR指令跳到finally语句里执行。
- 执行完finally语句后,返回之前保存在局部变量表里的值。
字节码文件解析:
大概讲讲指令操作顺序:
iconst_1: 把常数1进栈 —> istore_1: 栈顶元素出栈并把元素保存在本地变量表的第二个位置里(下标为1的位置里) —> iinc 1, 1 : 本地变量表的第二个元素自增1 —>iload_1:第二个元素进栈 —> istore_2:栈顶元素出栈并把元素保存在本地变量表的第2个位置里 —> iinc 1, 1 : 本地变量表的第二个元素自增1 —> iload_2:第二个元素进栈 (注意,此时栈顶元素为2)—> ireturn:返回栈顶元素。
上面流程栈和本地变量表的情况如下图:
出处:http://www.cnblogs.com/averey/p/4379646.html
0 0
- 你真的了解try{ return }finally{}中的return吗?
- 你真的了解try{ return }finally{}中的return?
- 你真的了解try{ return }finally{}中的return?
- 你真的了解try{ return }finally{}中的return?
- 你真的了解try{ return }finally{}中的return?
- try...catch...finally中的return
- try中的return与finally
- Python中的try, finally, return
- try...catch...finally中的return
- try finally中的return问题
- try和finally中的return
- 【笔试】try{}finally{}中的return
- try中的return与finally执行的顺序
- try中的return与finally执行的顺序
- Java中的try, finally, return的执行顺序
- return语句在Java的Try Catch Finally中的行为
- Java中的try-catch-finally-return的执行顺序
- 关于try finally 中的return语句的问题
- 从android:onClick属性谈运行时注解在Android中的运用
- Unity引用dll后发布报错"Encoding name 'IBM437' not supported"
- 环形缓冲区的应用ringbuffer
- Spring MVC 生成验证码
- 515. Find Largest Value in Each Tree Row
- 你真的了解try{ return }finally{}中的return吗?
- 证道歌
- 计161_Problem Y: C语言实验--字符变量的输入输出
- 呆萌程序猿的恋爱奇葩说
- Installshield windows注册表实时生效
- 算法提高 勾股数
- 对象引用
- ~粘滞位~
- STM32F407串口2配置