黑马程序员技术交流社区

标题: try中有return,先执行finally,还是先执行return? [打印本页]

作者: 哈达洋    时间: 2014-10-9 21:55
标题: try中有return,先执行finally,还是先执行return?
  1. public  class test {

  2.      public static void main(String[] args) {

  3.           System.out.println(new test().test());;

  4.      }

  5.      int test()

  6.      {
  7.           try
  8.           {
  9.               return func1();
  10.           }
  11.           finally
  12.           {
  13.                func2();
  14.           }
  15.      }

  16.      int func1()
  17.      {
  18.           System.out.println("func1");
  19.           return 1;
  20.      }

  21.      void func2()
  22.      {
  23.           System.out.println("func2");
  24.      }   
  25. }
复制代码


运行结果为:
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