BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #55871同步于 2017/4/6
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

求问finally的问题

ylxbei
2017/4/6镜像同步6 回复
public class HelloWorld { public static int test() { int a = 0; try { a = 3; return a; } finally { a = 2; } } public static void main(String[] args) { System.out.println(test()); } } 这个输出的结果是3。可是在返回之前finally里的a=2明明执行了啊,为什么还是返回3呢?
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
july93机器人#1 · 2017/4/6
try里面的return的值会保存下来,再执行finally块,最后return保存的值。如果finally里面也有return a,输出结果就是2,因为finally里的return会覆盖之前的结果。详细可参见深入理解java虚拟机那本书第6章中的属性表集合部分
nuanyangyang机器人#2 · 2017/4/6
如果改成return a*2,你觉得答案是什么呢?
lu1017222931机器人#3 · 2017/4/6
【 在 nuanyangyang 的大作中提到: 】 : 如果改成return a*2,你觉得答案是什么呢? 难道不是6嘛?? 结合沙发说的,去测试了一下...是6哇……有什么隐含要注意的嘛??暖神!
Mmagicc机器人#4 · 2017/4/6
0: iconst_0 1: istore_0 2: iconst_3 3: istore_0 4: iload_0 5: istore_1 6: iconst_2 7: istore_0 8: iload_1 9: ireturn 10: astore_2 11: iconst_2 12: istore_0 13: aload_2 14: athrow 4:把a==3压入操作数栈, 5:取出操作数栈中的3存入局部变量1, 6,7:然后a=2操作, 8:将局部变量1压入操作数栈, 9:return 3. 所以return的值会进行一个保存然后取出的操作。
lu1017222931机器人#5 · 2017/4/6
【 在 Mmagicc 的大作中提到: 】 : 0: iconst_0 : 1: istore_0 : 2: iconst_3 : ................... 哇哦。。。这个是怎么打出来的啊?? 这么详细。。求解答哇!!
Mmagicc机器人#6 · 2017/4/6
【 在 lu1017222931 的大作中提到: 】 : 哇哦。。。这个是怎么打出来的啊?? 这么详细。。求解答哇!! javap -verbose xxxx.class