zoukankan      html  css  js  c++  java
  • 当try和finally都包含return时的执行顺序

    两段代码演示:

    public class Demo4 {
        public static void main(String[] args) {
            System.out.println(new Demo4().test());
        }
        int test(){
            int x=1;
            try {
                return x;
            } finally {
                ++x;
            }
        }
    }
    

     这段代码执行后的结果是:1

     个人理解:当执行try中的语句时,返回值x现在存储的值是1,紧接着执行finally代码块++x,那么现在x的值是2

          那么问题来了:return x的值是否变为2了?答案是否定的,此时return x的值还是1;

          一旦return x的值确定,不管后面怎么操作,都不会影响。

    public class Demo5 {
        public static void main(String[] args) {
            Demo5 d=new Demo5();
    
            System.out.println(d.get());
        }
        public int get() {
            try {
                return fun1();
            } finally {
                return fun2();
            }
        }
            int fun1(){
                System.out.println("fun1");
                return 1;
            }
            int fun2(){
                System.out.println("fun2");
                return 2;
        }
    }
    

      这段代码执行的结果是:fun1  fun2   2

      个人理解:当main方法调用get方法时会调到try语句块,紧接着回跳到fun1方法中,此时回执行fun1的执行语句 然后返回1到 return fun1();

           try执行过后会执行finally代码块的语句,此时会跳到fun2方法中 执行fun2的输出语句 返回2到return fun2();

           那么最后的结果就是 fun1  fun2  2

    结论:(1)  try  finally  return 执行顺序是  先执行try  语句块   然后执行 finally语句块   之后执行return

       (2)  当try和finally中都出现return是 (前提不出现异常的情况) 以finally的语句块return为最后的结果

       (3)  当return在try语句块中是 一旦确定了返回值  finally语句块不管怎么操作返回值,结果都是不变的。

          反之当return在finally语句块中 try语句块先对返回值进行操作,那么此时的返回值以操作过后的为准

  • 相关阅读:
    安装Spring Tool Suite(STS)
    ES6,新增数据结构Set的用法
    在vue-cli生成的项目中使用karma+chrome进行单元测试
    利用babel-cli搭建支持ES6的node环境
    利用es-checker检测当前node对ES6的支持情况
    javascript精度问题与调整
    sessionStorage 、localStorage、cookie
    在vue-cli搭建的项目中在后台mock接口中支持req.body和req.cookies
    wireshark抓取本地数据包
    【linux基础】How to write CMakeLists.txt file?
  • 原文地址:https://www.cnblogs.com/LittleBoys/p/12100262.html
Copyright © 2011-2022 走看看