关于try语句的执行顺序
假如try{}里有一条return语句,finally里的语句会在return前执行还是会在return后执行?
请勿只回复一个“前”或者“后”,请给出理由。
在线等,答案确定立刻结帖。
[解决办法]
理由就是 谁制定了这个规则去问谁
现在应该去问oracle了
[解决办法]
finally不管在什么情况之下都会执行,执行的时间是在程序return 之前.
[解决办法]
实在是没什么理由。就像1楼说的,人家制定好的规则,我们在用而已
try里的return会先执行;
然后执行finally里的return。他会覆盖掉之前的值。最后返回的就是finally里的。
[解决办法]
[解决办法]
这样的问题没有什么实际意义,有经验的程序员是不会写这样的代码的。
一般都是面试题上有这样的问题。
[解决办法]
finally语句里的return不会执行 try块里的语句会等到finally语句执行完后才执行
[解决办法]
可以肯的告诉你是在return 前执行!!
[解决办法]
应该是return 之前会finally一下吧
[解决办法]
假如try{}里有一条return语句,finally里的语句会在return前执行还是会在return后执行?
在return 前啊 ,finally里面的语句肯定要执行的
[解决办法]
会在return 之前执行finally ,如果,不在之前,那return 过去了,那finally里面的就没有执行了
[解决办法]
[解决办法]
[解决办法]
[解决办法]
[解决办法]
好像是finally先执行,然后执行catch里的return,但是如果return的值被finally修改过的话还是取修改之前的。
如果finally里面也有return值则执行finally的return,会忽略catch那个return。
[解决办法]
finally在覆盖try的return。。。在try后执行
[解决办法]
public static int a=0;
public static int test0()
{
// int a=0;
try
{
return a;
}
finally
{
++a;
}
}
/*
public static int test2()
{
int a=0;
try
{
return a;
}
finally
{
return ++a;
}
}
*/
public static void main(String args[])
{
System.out.println(a);
// System.out.println(test2());
}
输出为0,说明return 后finally 没有执行,test2执行能返回1,是将try中的return 覆盖掉了
[解决办法]
这个确实错了。。
我想说的是有返回值的情况下,jvm会先看try里有没有return;
有的话,先存储return的值。接下来才到finally;
再然后 取出之存储的值,执行return操作。
[解决办法]
如果是无返回类型的,就简单了,直接插到 return之前执行,看下字节码,就清楚了。
- Java code
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
[解决办法]
单步看下不就知道了 这问题为啥这么多人在纠结。。
[解决办法]
- Java code
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楼例子说下
- Java code
public static int test2() { int a=0; try { return a++; } finally { return ++a; } }
[解决办法]
finally块中的内容在控制转出try块前执行。
return语句是转出try块的一个方式,所以在return前会执行finally块