什么是AssertionError? 在这种情况下,我应该从我自己的代码中抛出?

在“Effective Java,2nd edition”这本书的第2部分,有这段代码,其中作者想要禁止对象的空初始化。

class Example { private Example() { throw new AssertionError(); } } 

抛出的exception的types,在这里让我困惑。

我不明白,如果AssertionError是由于缺less更适合的错误或因为它应该是这样的抛出。

据我所知,当assert语句失败时,框架抛出这个错误。 另外,在javadoc它只是写

[AssertionError is]抛出以表示断言失败。

但是我没有看到这里被触犯的任何断言(真假陈述)。 当然“你不应该实例化这个类的一个项目”这个语句已经被违反了,但是如果这是背后的逻辑的话,那么我们都应该抛出AssertionError的东西,那显然不是什么情况。

FWIW,我刚刚扔了一个

 new IllegalStateException("Must not instantiate an element of this class") 

有什么问题吗? 在这种情况下,我应该在自己的代码中抛出一个AssertionError

对不起,如果这只是一个微妙的怀疑,但我在我的代码中使用这种模式很多,我想确保我做的是正确的事情。

当然,“你不应该实例化这个类的一个项目”这个语句已经被违反了,但是如果这是背后的逻辑,那么我们都应该抛出AssertionErrors ,这显然不是什么情况。

该代码并不是说用户不应该调用零参数构造函数。 有人断言说,就程序员所知,他/她已经不可能调用零参数构造函数(在这种情况下,通过将其设置为private而不是在Example的代码中调用它)。 所以如果发生一个调用,那个断言就被违反了,所以AssertionError是合适的。

AssertionError的含义是开发人员认为不可能发生的事情。

所以如果一个AssertionError被抛出,这是一个编程错误的明显迹象。

一个断言当说:“你已经写了一个不应该不惜代价地执行的代码,因为根据你的逻辑,它不应该发生,但是如果它发生,然后抛出AssertionError,你不抓住它。 在这种情况下,你会抛出Assertion错误。

 new IllegalStateException("Must not instantiate an element of this class")' // Is an Exception not error. 

注意:声明错误出现在java.lang.Error中,并且错误不意味着被捕获。

AssertionError是一个未经检查的exception,由程序员或API开发人员明确指出assert语句失败。

 assert(x>10); 

输出:

 AssertionError 

如果x不大于10,那么你会得到运行exceptionAssertionError。