标题: try 与finally 执行先后的问题? [打印本页] 作者: 李红飞 时间: 2012-5-28 07:57 标题: try 与finally 执行先后的问题? public class Test
{
public static void main(String args[])
{
Test t = new Test();
int b = t.get();
System.out.println(b);
}
public int get()
{
try
{
return 1 ;
}
finally
{
return 2 ;
}
}
}
结果是2
public class Test {
public static void main(String[] args) {
System.out.println(new Test().test());;
}
static int test()
{
int x = 1;
try
{
return x;
}
finally
{
++x;
}
}
而且,楼主,try,catch语句必须成对出现(尽管不出现异常时不会执行catch语句),finally语句可以不出现。作者: 张頔 时间: 2012-5-28 15:25
楼主 你第一个程序 就是限制性的try 后执行的finally
int b = t.get(); //执行完try之后b=1,执行完finally之后return了2所以b=2
System.out.println(b);
而你的第二个程序
int x = 1;
try
{
return x; //这里返回了1 这时b=1
}
finally
{
++x; // 这时你并没有返回值 所以x虽然加了1变成了2 但是你没有返回值 所以这时b还是等于1
} 作者: 揭耀祖 时间: 2012-5-28 18:17
public class Test
{
public static void main(String args[])
{
Test t = new Test();
int b = t.get();
System.out.println(b);
}
public int get()
{
try
{
return 1 ;
}
finally
{
return 2 ;
}
}
}
这个get()函数它返回了两个值,一个是1,一个是2,但为什么结果是2呢?因为就好比有一个罐子,先放入了1,再放入了2,当你取出的时候,因为1在罐子底子下,取不到只能取到上面的2,所以最后的值是2.
对于你的第二个问题就更好解释了,因为finally()里没有返回值所以你懂的。 作者: 信义明 时间: 2012-5-28 19:43
public class Test
{
public static void main(String args[])
{
Test t = new Test();
int b = t.get();
System.out.println(b);
}
public int get()
{
try
{
return 1 ;//程序执行到此b=1,由于程序未结束,所以继续执行
}
finally
{
return 2 ;//程序执行到此b的值被返回的2替换,最终得到的b=2
}
}
}
public class Test {
public static void main(String[] args) {
System.out.println(new Test().test());;
}
static int test()
{
int x = 1;
try
{
return x;//程序执行到此返回x=1,并由主函数打印
}
finally
{
++x;//程序执行到此x自增,并没有返回,因此最终x=1
}
}