zoukankan      html  css  js  c++  java
  • try catch finally return 轶事

    最近阿里发布了java开发手册终极版,看到其中一条规约:【强制】不能在 finally 块中使用 return, finally 块中的 return 返回后方法结束执行,不会再执行 try 块中的 return 语句。于是在ideal里面实际跑了一下,果然如此。于是好奇编译后的代码是如何的,结果很是惊讶呢,细品还是很有道理的。代码如下:

    public int test() {
        try{
            System.out.println("try");
            return 3;
        }catch (Exception e){
            System.out.println("exception");
            return 1;
        }finally{
            System.out.println("finally");
            return 2;
        }
    }

    运行结果如下:

    try
    finally
    2
    的确没有输出try块中的return值,反编译之后代码如下:

    public int test() {
        try {
            System.out.println("try");
            boolean var1 = true;
        } catch (Exception var6) {
            System.out.println("exception");
            boolean var2 = true;
        } finally {
            System.out.println("finally");
            return 2;
        }
    }
        

    对代码稍作改动,去掉finally中的return语句。

    public int test() {
        try{
            System.out.println("try");
            return 3;
        }catch (Exception e){
            System.out.println("exception");
            return 1;
        }finally{
            System.out.println("finally");
            //return 2;
        }
    }

    运行结果如下:

    try
    finally
    3
    反编译之后的代码如下:

    public int test() {
        byte var2;
        try {
            System.out.println("try");
            byte var1 = 3;
            return var1;
        } catch (Exception var6) {
            System.out.println("exception");
            var2 = 1;
        } finally {
            System.out.println("finally");
        }
        return var2;
    }
  • 相关阅读:
    【BZOJ3166】ALO(主席树)
    【UOJ#188】Sanrd(min_25筛)
    伯努利数
    【51Nod1258】序列求和V4(FFT)
    【BZOJ5306】[HAOI2018]染色(NTT)
    【BZOJ4943】【NOI2017】蚯蚓排队(哈希)
    【BZOJ4912】天才黑客(最短路,虚树)
    【BZOJ5333】荣誉称号(动态规划)
    NOI2018前的每日记录
    【BZOJ1088】扫雷(递推)
  • 原文地址:https://www.cnblogs.com/robertsun/p/7609535.html
Copyright © 2011-2022 走看看