try - finally执行先后?

来源:互联网 发布:淘宝卖家假货怎么避免 编辑:程序博客网 时间:2024/06/05 18:07

有这样的一段代码:

public static void main(String[] args) {System.out.println("t="+test());}private static int test() {int x = 1;        try        {            return x;        }        finally        {            ++x;            System.out.println("x="+x);        }}
输出结果:]

x=2t=1

从结果来看,肯定是执行了,也不可能先于try执行,大多数人觉得是后于try执行,也有说是return执行中的时候执行。。。。。但是看下面的例子。


查了一些资料:

  public static void  main(String args[])      {            smallT t  = new  smallT();            int  b  =  t.get();            System.out.println(b);      }            public int  get()      {            try            {                  return 1 ;            }            finally            {                  return 2 ;            }      }

结果:输出2.。。。。。。。。。


和上面对照看起来,就感觉很奇怪了


再看一个:

 */

     public static void main(String[] args) {

          // TODO Auto-generated method stub

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

     }

 

     int test()

     {

          try

          {

              return func1();

          }

          finally

          {

              return func2();

          }

     }

    

     int func1()

     {

          System.out.println("func1");

          return 1;

     }

     int func2()

     {

          System.out.println("func2");

          return 2;

     }    

-----------执行结果-----------------

 

func1

func2

2


结论:(仅供参考)try中的return语句调用的函数先于finally中调用的函数执行,也就是说return语句先执行,finally语句后执行,所以,返回的结果是2Return并不是让函数马上返回,而是return语句执行后,将把返回结果放置进函数栈中,此时函数并不是马上返回,它要执行finally语句后才真正开始返回。


0 0