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?在这种情况下是否有适用的规则?
编辑: 对不起!在这个例子中应该有断言(假)
finally块始终运行.在assert真求值,所以该finally块抛出异常.
此外,默认情况下默认禁用断言,这可能是断言永远不会被评估的原因.
PS
如果assert计算结果为false,finally则无论如何都会运行并抛出异常,而不是AssertionError.
记住finally块总是运行,除非JVM在try块中停止.