try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?

根据java规范:在try-catch-finally中,如果try-finally或者catch-finally中都有return,则两个return语句都执行并且最终 
返回到调用者那里的是finally中return的值;而如果finally中没有return,则理所当然的返回的是try或者catch中return的值,但是 
finally中的代码是必须要执行的,而且是在return前执行,除非碰到exit()。

以下例子证明了上述说法:

public  class Testfinal {

    public static void main(String[] args) {

       // TODO Auto-generated method stub

      // System.out.println( new  Test().test() );;
       System.out.println(new Testfinal().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;

    }   

}
运行结果:

原文地址:https://www.cnblogs.com/Rosefxd/p/3103763.html