Java AssertionError和assert

Java AssertionError和assert,java,exception,assert,throwable,Java,Exception,Assert,Throwable,我正在准备OCP7,我在其中一本证书书上遇到了这篇文章 阻止您尝试用断言替换 异常情况下,AssertionError不提供对对象的访问 这就产生了它。你得到的只是字符串消息 我尝试了很多可能性来执行所说的内容,但我发现在断言错误方面与其他人没有区别 你能给我解释一下那句话的意思吗?解释可以在断言关键字的下面部分找到: 为什么AssertionError不允许访问生成它的对象?类似地,为什么不将一个任意对象从断言传递到AssertionError构造函数以代替详细信息? 对这些对象的访问将鼓励程

我正在准备OCP7,我在其中一本证书书上遇到了这篇文章

阻止您尝试用断言替换 异常情况下,AssertionError不提供对对象的访问 这就产生了它。你得到的只是字符串消息

我尝试了很多可能性来执行所说的内容,但我发现在断言错误方面与其他人没有区别


你能给我解释一下那句话的意思吗?

解释可以在
断言
关键字的下面部分找到:

为什么AssertionError不允许访问生成它的对象?类似地,为什么不将一个任意对象从断言传递到AssertionError构造函数以代替详细信息?

对这些对象的访问将鼓励程序员尝试从断言失败中恢复,而断言失败违背了工具的目的

考虑以下代码:

int i = 0;
assert i != 0 : "i must not be zero"

如果启用了断言,这将抛出一个
AssertionError
,并将消息初始化为
“我不能为零”
。但这就是这个错误将包含的全部内容。如果它包含更多信息,它将鼓励开发人员通过捕获
AssertionError
以某种方式从错误中恢复过来。理论上,,仍然可以检查错误消息并尝试对其进行处理,但这样做确实违反了所有良好做法。

这并不能解释,因为AssertionError类继承了Throwable的方法,而没有添加或重写任何类似IOException的内容。@Aladdin抛出
AssertionError
您自己,以及由
assert
关键字自动抛出的。如果你自己扔它,你可以给它一个对象,但是
assert
关键字不会这样做。