日期:2014-05-20  浏览次数:20785 次

关于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 覆盖掉了