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
  • 相关阅读:
    前端程序员容易忽视的一些基础知识
    一道前端学习题
    Unity调用Windows对话框保存时另存为弹框
    Unity镜子效果的实现(无需镜子Shader)
    Unity射线检测的用法总结
    unity中实现简单对象池,附教程原理
    Unity调用Window提示框Yes/No(英文提示窗)
    Unity调用Windows弹框、提示框(确认与否,中文)
    C#LinQ语法
    服务器的购买与网站的创建
  • 原文地址:https://www.cnblogs.com/dfyz/p/4606260.html
Copyright © 2011-2022 走看看