黑马程序员技术交流社区
标题:
try中有return,先执行finally,还是先执行return?
[打印本页]
作者:
哈达洋
时间:
2014-10-9 21:55
标题:
try中有return,先执行finally,还是先执行return?
public class test {
public static void main(String[] args) {
System.out.println(new test().test());;
}
int test()
{
try
{
return func1();
}
finally
{
func2();
}
}
int func1()
{
System.out.println("func1");
return 1;
}
void func2()
{
System.out.println("func2");
}
}
复制代码
运行结果为:
func1
func2
1
那也就是说,其实是先执行return,但是这个时候结果并没有立即返回给主函数,只是暂时存放在了一个内存空间中,等finally执行完后,再执行将内存空间上的结果返给给主函数。
作者:
cs8630323
时间:
2014-10-10 00:31
楼主自问自答有意思吗{:3_54:}
作者:
嘿~~
时间:
2014-10-10 12:36
不错。。有点技术含量
作者:
懒羊羊
时间:
2014-10-10 12:38
你应该过会再发布答案
作者:
高泳
时间:
2014-10-10 13:38
不错啊。
作者:
会飞的蜗牛
时间:
2014-10-10 13:55
我是来混分的
作者:
Quasimodo
时间:
2014-10-10 14:07
在try finally语句中应该用类似这样的代码
int x = 1;
try
{
x++;
return x;
}
finally
{
++x;
}
然后执行,打印X。看看finally对X的改变会不会改变返回结果。
结果返回的仍然是2.
所以在try语句中,在执行return语句时,要返回的结果已经准备好了,就在此时,程序转到finally执行了。
在转去之前,try中先把要返回的结果存放到不同于x的局部变量中去,执行完finally之后,在从中取出返回结果,
因此,即使finally中对变量x进行了改变,但是不会影响返回结果。
它应该使用栈保存返回值。
作者:
刘家斌
时间:
2014-10-10 14:54
调用的是方法,肯定要把方法执行完的,finally是必执行的,return返回在之前执行,返回值是确定的
作者:
戏言丶
时间:
2014-10-10 14:58
我以为是问题,原来楼主已经自己说了,好不容易有个会的:@
作者:
夕默
时间:
2014-10-10 20:10
总结的挺好的。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2