zoukankan      html  css  js  c++  java
  • Java finally语句到底是在return之前还是之后执行?

    至少有两种情况下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 block
    finally block
    b>25, b = 100
    100
    说明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 block
    return statement
    finally block
    after return
  • 相关阅读:
    MVC+EF 理解和实现仓储模式和工作单元模式 MVC+EF 理解和实现仓储
    ANDROID中BROADCASTRECEIVER的两种注册方式(静态和动态)详解
    企业微信通讯录组件一个机制
    linq查询DataTable中的某列去重数据
    C# 判断文件流类型
    js中使用settimeout的问题
    一个做流程的开源库
    javascript判断两个日期是否相等
    开发小贴士
    zepto.js与jquery.js
  • 原文地址:https://www.cnblogs.com/dfyz/p/4606260.html
Copyright © 2011-2022 走看看