黑马程序员技术交流社区
标题:
关于try{ }finally{ }中返回值
[打印本页]
作者:
姚宏
时间:
2013-11-23 11:39
标题:
关于try{ }finally{ }中返回值
是这样的,依照我的理解,test1中try代码块执行了func1有了返回值n,那么这个返回值就已经放入栈中存起来,finally代码块中对n的操作(fun3)不会影响到栈中存储结果了。
可是在test2中try代码块执行了func1有了返回值n,finally代码块也出现了返回值n+1,最终必须执行finally代码,结果是返回n+1,那个我的问题就是两个return值是否都存入栈中了?还是第二return值覆盖了第一个呢?
不知道是不是我理解有误,请给予指点
物联网 第七期 有没有qq交流群
复制代码
运行结果是
func1
func3
1
func1
func2
2
作者:
姚宏
时间:
2013-11-23 11:41
这个是代码
public class ExceptionRe {
public static int func1(int n)
{System.out.println("func1");
return n;
}
public static int func2(int n)
{
System.out.println("func2");
return n+1;
}
public static void func3(int n)
{
System.out.println("func3");
++n;
}
public static int test1(int n)//test1
{
try{
return func1(n);
}
finally{
func3(n);
}
}
public static int test2(int n)//test2
{
try{
return func1(n);
}
finally
{
return func2(n);
}
}
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
int n=1;
System.out.println(test1(n));
System.out.println(test2(n));
}
}
作者:
中关村阿旺
时间:
2013-11-23 21:24
当然是覆盖操作了。虽然func1()方法返回了1,但是finally中的代码一定会被执行啊,又不是System.exit(0);没有让程序退出,当然会执行。那么func2()方法返回了2,并把之前的结果覆盖了。
作者:
姚宏
时间:
2013-11-23 21:47
中关村阿旺 发表于 2013-11-23 21:24
当然是覆盖操作了。虽然func1()方法返回了1,但是finally中的代码一定会被执行啊,又不是System.exit(0); ...
ok 谢谢你了 等了半天不容易啊 虽然我自己也这样认为但不敢确定 现在好了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2