A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  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执行完后,再执行将内存空间上的结果返给给主函数。

9 个回复

倒序浏览
楼主自问自答有意思吗{:3_54:}
回复 使用道具 举报
不错。。有点技术含量
回复 使用道具 举报
你应该过会再发布答案
回复 使用道具 举报
不错啊。
回复 使用道具 举报
会飞的蜗牛 来自手机 中级黑马 2014-10-10 13:55:02
地板
我是来混分的
回复 使用道具 举报
在try finally语句中应该用类似这样的代码
                int x = 1;
                try
                {
                        x++;
                        return x;
                }
                finally
                {
                        ++x;
                }
然后执行,打印X。看看finally对X的改变会不会改变返回结果。
结果返回的仍然是2.
所以在try语句中,在执行return语句时,要返回的结果已经准备好了,就在此时,程序转到finally执行了。
在转去之前,try中先把要返回的结果存放到不同于x的局部变量中去,执行完finally之后,在从中取出返回结果,
因此,即使finally中对变量x进行了改变,但是不会影响返回结果。
它应该使用栈保存返回值。
回复 使用道具 举报
调用的是方法,肯定要把方法执行完的,finally是必执行的,return返回在之前执行,返回值是确定的
回复 使用道具 举报
我以为是问题,原来楼主已经自己说了,好不容易有个会的:@
回复 使用道具 举报
夕默 中级黑马 2014-10-10 20:10:28
10#
总结的挺好的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马