Java Try 中的多个捕获断言

Java Assertion in Try with multiple catchs

场景:

class Assert {
    public static void main(String []args) {
        try {
            assert false;
        }
        catch (RuntimeException re) {
            System.out.println("In the handler of RuntimeException");
        }
        catch (Exception e) {
            System.out.println("In the handler of Exception");
        }
        catch (Error ae) {
            System.out.println("In the handler of Error");
        }
        catch (Throwable t) {
            System.out.println("In the handler of Throwable");
        }
    }
}

我期待 'In the handler of Error' 因为 AssertionError 是 Error 的子类,但它不显示任何内容并正常终止。然后检查输出我在错误处理程序之前添加了这个捕获处理程序。

catch (AssertionError t) {
    System.out.println("In the handler of Throwable");
}

我知道捕获错误不是一个好习惯,但如果我们不需要捕获程序未崩溃的原因,它会正常终止吗?

默认情况下禁用断言,在使用 java 执行代码时在命令行中添加 -ea:

java -ea Assert