Java 学习笔记

所有文章
📖 最新文章 transmittable-thread-local 库 JOOR 反射库 Lombok 库:为你减少样板代码 Slf4j 日志组件的使用 加速maven、gradle依赖下载
📖 Java 基础 安装 第一个程序 使用 UTF-8 编写代码 空值 null 正则表达式 线程 日期/时间 匿名类 枚举 ThreadLocal 线程本地变量 动态代理 jar 命令

Java try finally return 解惑


若可以走到 finally 里的 return ,则以该 return 为准

示例:

public class Main {

    public static void main(String[] args) {

        System.out.println(getNumber(false));
        System.out.println(getNumber(true));

    }

    public static int getNumber(boolean flag) {

        try {
            if (flag) {
                throw new RuntimeException("...");
            }
            return 1;
        } catch (Exception ex) {
            return 2;
        } finally {
            return 3;
        }

    }
}

结果:

3
3

若出了 finally 之后,还有 return,则以实际运行时走到的return为准

示例:

public class Main {

    public static void main(String[] args) {

        System.out.println(getNumber(false));

    }

    public static int getNumber(boolean flag) {

        try {
            if (flag) {
                throw new RuntimeException("...");
            }
        } finally {
            return 1;
        }
        return 2;
    }
}

编译会报错:

$ javac Main.java
Main.java:18: 错误: 无法访问的语句
        return 2;
        ^
1 个错误

可以通过加个判断语句绕过这个语法检查。见下面的示例:

public class Main {

    public static void main(String[] args) {

        System.out.println(getNumber(false));
        System.out.println(getNumber(true));

    }

    public static int getNumber(boolean flag) {

        try {
            if (flag) {
                throw new RuntimeException("...");
            }
        } finally {
            if (flag) {
                return 1;
            }
        }
        return 2;
    }
}

运行结果:

2
1

( 本文完 )

文章目录