Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 异常和错误报告顺序_Java_Scjp_Open Closed Principle - Fatal编程技术网

Java 异常和错误报告顺序

Java 异常和错误报告顺序,java,scjp,open-closed-principle,Java,Scjp,Open Closed Principle,以下代码适用哪些规则: try { assert (false) : "jane"; } catch (Exception e2) { System.out.print("ae2 "); } finally { throw new IllegalArgumentException(); } 已启用资产 为什么报告IllegalArgumentException而不是AssertionError?在这种情况下是否有适

以下代码适用哪些规则:

    try {
        assert (false) : "jane";
    } catch (Exception e2) {
        System.out.print("ae2 ");
    } finally {
        throw new IllegalArgumentException();
    }
已启用资产

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

编辑:
很抱歉在本例中,应该有assert(false

最后
块始终运行。
assert
的计算结果为true,因此
finally
块抛出异常

另外,断言在默认情况下是禁用的,这可能是断言从未得到评估的原因

p、

如果
assert
的计算结果为false,
finally
仍将运行并抛出异常,而不是
AssertionError


记住
最后
块始终运行,除非JVM在
try
块中停止。

执行任何操作的唯一一行是

throw new IllegalArgumentException();
鉴于

assert true

不做任何事情,即使它做了,也不会被
捕获(异常

最终
块(或
捕获
块)中未捕获的异常捕获)导致来自
try
块的任何异常被丢弃。有关详细信息,请参阅。从Java 7开始,封闭的try/catch块可以恢复丢弃的异常(如所述)。

始终会执行
最后的
块。不会执行的唯一情况是JVM关闭(即
系统退出(-)

你可能会发现有趣的是,即使你有:

try { 
    return ...; 
} 
finally { 
    ...
}

finally块仍将执行,并将在方法退出之前执行。

assert
不会返回任何内容。好的,确切地说,我会说是evaluates。谢谢你的回答。我第一次在Stackoverflow遇到来自PUT的人;)哈,很高兴在这里找到大学同学;-)祝你的SCJP好运。谢谢,我以95%的分数通过了今天的考试在这种情况下,答案是finally总是最后执行,并替换除
System.exit()之外的任何先前操作