关于try语句的执行顺序
假如try{}里有一条return语句,finally里的语句会在return前执行还是会在return后执行?
请勿只回复一个“前”或者“后”,请给出理由。
在线等,答案确定立刻结帖。
[解决办法]
理由就是 谁制定了这个规则去问谁
现在应该去问oracle了
[解决办法]
finally不管在什么情况之下都会执行,执行的时间是在程序return 之前.
[解决办法]
实在是没什么理由。就像1楼说的,人家制定好的规则,我们在用而已
try里的return会先执行;
然后执行finally里的return。他会覆盖掉之前的值。最后返回的就是finally里的。
[解决办法]
[解决办法]
这个确实错了。。
我想说的是有返回值的情况下,jvm会先看try里有没有return;
有的话,先存储return的值。接下来才到finally;
再然后 取出之存储的值,执行return操作。
public class test { public static void test() { int a=0;//init a try{ a++; return ; } finally { a--; } } } public static void test(); Code: 0: iconst_0 //初始化 0 当前操作数 1: istore_0 //操作数存入 0 的位置 2: iinc 0, 1 //0位置的数 加 1 ;这里是try中的 a++ 5: iinc 0, -1 //0位置的数 减 1 ;finally中的操作 8: return //返回 //下面的是异常时候 执行finally操作 然后抛出异常 9: astore_1 10: iinc 0, -1 13: aload_1 14: athrow
[解决办法]
单步看下不就知道了 这问题为啥这么多人在纠结。。
[解决办法]
public class Catch { public static int test() { int a = 0; try { System.out.println("try:"+a); return a; } finally { System.out.println("finally:"+a); } } public static void main(String args[]) { System.out.println(test()); }}
[解决办法]
前
规定是这样就是这样啦。。。
[解决办法]
简单的说 就是一个try 里面 无论什么情况 finally都会执行一次!
[解决办法]
修改15楼例子说下
public static int test2() { int a=0; try { return a++; } finally { return ++a; } }
[解决办法]
finally块中的内容在控制转出try块前执行。
return语句是转出try块的一个方式,所以在return前会执行finally块