Java finally语句到底是在return之前还是之后执行?

来源:互联网 发布:niginx 域名配置 编辑:程序博客网 时间:2024/06/15 22:01
至少有两种情况下finally语句是不会被执行的:

(1)try语句没有被执行到,如在try语句之前就返回了,这样finally语句就不会执行,这也说明了finally语句被执行的必要而非充分条件是:相应的try语句一定被执行到。

(2)在try块中有System.exit(0);这样的语句,System.exit(0);是终止Java虚拟机JVM的,连JVM都停止了,所有都结束了,当然finally语句也不会被执行到。

 其余是这样的

 finally语句是在try的return语句执行之后,return返回之前执行。


public class FinallyTest1 { public static void main(String[] args) { System.out.println(test1()); } public static int test1() { int b = 20; try { System.out.println("try block"); return b += 80; } catch (Exception e) { System.out.println("catch block"); } finally { System.out.println("finally block"); if (b > 25) { System.out.println("b>25, b = " + b); } } return b; } }
运行结果:
try blockfinally blockb>25, b = 100100
说明return语句已经执行了再去执行finally语句,不过并没有直接返回,而是等finally语句执行完了再返回结果。

public class FinallyTest1 {    public static void main(String[] args) {                System.out.println(test11());    }        public static String test11() {        try {            System.out.println("try block");           return test12();      } finally {           System.out.println("finally block");       }  }  public static String test12() {       System.out.println("return statement");       return "after return";   }    }
运行结果
try blockreturn statementfinally blockafter return
阅读全文
0 0
原创粉丝点击