try和finally中同时有return,返回顺序是怎样

来源:互联网 发布:用友软件集团招聘 编辑:程序博客网 时间:2024/05/16 14:22

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

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


也许你的答案是在return之前,但往更细地说,我的答案是在return中间执行,请看下面程序代码的运行结果:

<span style="font-family:Microsoft YaHei;font-size:14px;">public class TryAndFinal {public static void main(String[] args) {        System.out.println(test2());}    static int test2()      {          int x = 1;          try          {   System.out.println("this is in try");        System.out.println(x);            return x;          }          finally          {  System.out.println("this is infinal");            ++x;              System.out.println(x);        }      }  }</span>

运行结果是:

<span style="font-family:Microsoft YaHei;font-size:14px;">this is in try1this is infinal21</span>
也就是说,在try中间有返回值,则结果就是那个返回值

<span style="font-family:Microsoft YaHei;font-size:14px;">public class TryAndFinal {public static void main(String[] args) {        System.out.println(test2());}    static int test2()      {          int x = 1;          try          {   System.out.println("this is in try");        System.out.println(x);            return x;          }          finally          {  System.out.println("this is infinal");            ++x;              System.out.println(x);return x;        }      }  }</span>
则返回结果是:

<span style="font-family:Microsoft YaHei;font-size:14px;">this is in try1this is infinal22</span>
也就是说一定会先执行try 中的内容,包括返回值,然后是finally中的内容。

但是,执行完try中后,这时程序并没有结束,这就相当于你的test()方法其实还没有完,之前的返回都放在一个变量里,当你执行完finally时,如果值改变值返回新的值,如果没有改变依旧返回原来的值。





0 0