AssertionError和断言

时间:2015-11-28 11:25:03

标签: java exception assert throwable

我正在为OCP 7做准备,我在其中一本证书上遇到了这篇文章。

  

劝阻你不要试图用断言代替   异常,AssertionError不提供对象的访问   产生它。你得到的只是String消息。

我尝试了很多可能性来表达所说的内容,但我发现AssertionError与其他人没有任何区别。

你能解释一下这句话的含义吗?

1 个答案:

答案 0 :(得分:3)

可以在assert关键字的the FAQ in the documentation中找到解释:

  

为什么AssertionError不允许访问生成它的对象?类似地,为什么不将断言中的任意对象传递给AssertionError构造函数来代替详细消息?

     

访问这些对象会鼓励程序员尝试从断言失败中恢复,这会破坏设施的目的。

请考虑以下代码:

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

如果启用了断言,则会抛出AssertionError,并将消息初始化为"i must not be zero"。但这就是所有这个错误都包含的内容。如果它包含更多信息,它将鼓励开发人员通过捕获AssertionError以某种方式从错误中恢复。从理论上讲,仍然可以检查错误信息并尝试用它做一些事情但是你真的反对每一个好的做法。