返回信息流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呢?
这是一条镜像帖。来源:北邮人论坛 / java / #55871同步于 2017/4/6
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
求问finally的问题
ylxbei
2017/4/6镜像同步6 回复
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
try里面的return的值会保存下来,再执行finally块,最后return保存的值。如果finally里面也有return a,输出结果就是2,因为finally里的return会覆盖之前的结果。详细可参见深入理解java虚拟机那本书第6章中的属性表集合部分
【 在 nuanyangyang 的大作中提到: 】
: 如果改成return a*2,你觉得答案是什么呢?
难道不是6嘛??
结合沙发说的,去测试了一下...是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的值会进行一个保存然后取出的操作。
【 在 Mmagicc 的大作中提到: 】
: 0: iconst_0
: 1: istore_0
: 2: iconst_3
: ...................
哇哦。。。这个是怎么打出来的啊?? 这么详细。。求解答哇!!
【 在 lu1017222931 的大作中提到: 】
: 哇哦。。。这个是怎么打出来的啊?? 这么详细。。求解答哇!!
javap -verbose xxxx.class