例外和错误报告顺序

mma*_*oka 4 java scjp open-closed-principle

适用于以下代码的规则如下:

    try {
        assert (false) : "jane";
    } catch (Exception e2) {
        System.out.print("ae2 ");
    } finally {
        throw new IllegalArgumentException();
    }
Run Code Online (Sandbox Code Playgroud)

已启用资产.

为什么报告IllegalArgumentException而不是AssertionError?在这种情况下是否有适用的规则?

编辑: 对不起!在这个例子中应该有断言()

Mec*_*kov 6

finally块始终运行.在assert真求值,所以该finally块抛出异常.

此外,默认情况下默认禁用断言,这可能是断言永远不会被评估的原因.

PS

如果assert计算结果为false,finally则无论如何都会运行并抛出异常,而不是AssertionError.

记住finally块总是运行,除非JVM在try块中停止.