首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

关于try语句的执行顺序解决方法

2012-01-08 
关于try语句的执行顺序假如try{}里有一条return语句,finally里的语句会在return前执行还是会在return后执

关于try语句的执行顺序
假如try{}里有一条return语句,finally里的语句会在return前执行还是会在return后执行?

请勿只回复一个“前”或者“后”,请给出理由。

在线等,答案确定立刻结帖。

[解决办法]
理由就是 谁制定了这个规则去问谁

现在应该去问oracle了
[解决办法]
finally不管在什么情况之下都会执行,执行的时间是在程序return 之前.
[解决办法]
实在是没什么理由。就像1楼说的,人家制定好的规则,我们在用而已

try里的return会先执行;
然后执行finally里的return。他会覆盖掉之前的值。最后返回的就是finally里的。
[解决办法]

探讨

那么三楼的结果就是在return后执行了?

[解决办法]
这样的问题没有什么实际意义,有经验的程序员是不会写这样的代码的。
一般都是面试题上有这样的问题。
[解决办法]
finally语句里的return不会执行 try块里的语句会等到finally语句执行完后才执行
[解决办法]
可以肯的告诉你是在return 前执行!!
[解决办法]
应该是return 之前会finally一下吧
[解决办法]
假如try{}里有一条return语句,finally里的语句会在return前执行还是会在return后执行?


在return 前啊 ,finally里面的语句肯定要执行的
[解决办法]
会在return 之前执行finally ,如果,不在之前,那return 过去了,那finally里面的就没有执行了
[解决办法]
探讨

try里的return会先执行;
然后执行finally里的return。他会覆盖掉之前的值。最后返回的就是finally里的。

[解决办法]
探讨
引用:

try里的return会先执行;
然后执行finally里的return。他会覆盖掉之前的值。最后返回的就是finally里的。

这貌似错了吧、

[解决办法]
探讨

finally不管在什么情况之下都会执行,执行的时间是在程序return 之前.

[解决办法]
探讨

引用:
引用:

try里的return会先执行;
然后执行finally里的return。他会覆盖掉之前的值。最后返回的就是finally里的。

这貌似错了吧、

来两个例子。
Java code
public static int test()
{
int……

[解决办法]
好像是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操作。

探讨
实在是没什么理由。就像1楼说的,人家制定好的规则,我们在用而已

try里的return会先执行;
然后执行finally里的return。他会覆盖掉之前的值。最后返回的就是finally里的。

[解决办法]
如果是无返回类型的,就简单了,直接插到 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块

热点排行