本帖最后由 Sword 于 2013-6-1 00:40 编辑
class Test5
{
public static void main(String[] args)
{
System.out.println(getValue1());//调用方法并且输出打印结果是13
System.out.println(getValue2());//结果是6
}
public static int getValue1() //这个方法证明了return是在finally执行后才返回的
{
int a1 = 1;
int a2 = 4;//定义两个变量
try
{
System.out.println(a2+=8);//输出12
return a1+=99;//如果是try的return先执行应该返回的是100
}
finally
{
//return a2++;//返回的是12,
return ++a2;//返回的是13,前++和后++有区别
//return a1;
//return a1+=200;
}
}
public static int getValue2()//这个方法证明了finally无法改变返回值,最后还是6。
{
int a3 = 3;
try
{
return a3+=3;
}
finally
{
a3+=11;//但是此种情况返回的是6而不是14.由此在getValue1的方法中如果finally是return的a1
//输出的是100,若是return的a1+=200,则输出的是300.
System.out.println(a3);//打印出17
}
}
}
/*
总结:在此代码中。try中的return是参与计算了的。但是并没有马上返回给函数。
如果finally里有return则将其覆盖了。但是finally在其中用到了try的return中的数据仍然会调用try的return。
若是finally中没有return那么返回的将是try中的return。
而在getValue2最后中finally打印的是17,只不过返回的却是try的return罢了。
所以:return确实是在finally执行完以后才返回的,如果是finally有return则会将try的return覆盖掉,
否则返回的是try中的return
|