任何人都可以抛出`java.lang.InternalError`或`java.lang.UnknownError`吗?

joh*_*902 4 java exception

我一直很好奇如何抛出java.lang.InternalErrorjava.lang.UnknownError抛出.

我的意思并不简单

throw new InternalError();
throw new UnknownError();
Run Code Online (Sandbox Code Playgroud)

但是Java SE库或JVM本身抛出了一个(最近通常的Oracle实现).

例如,ArrayList.clone真正抛出特定代码或环境InternalError是我想要的答案.以下是其源代码.

public Object clone() {
    try {
        ArrayList<?> v = (ArrayList<?>) super.clone();
        v.elementData = Arrays.copyOf(elementData, size);
        v.modCount = 0;
        return v;
    } catch (CloneNotSupportedException e) {
        // this shouldn't happen, since we are Cloneable
        throw new InternalError(e);
    }
}
Run Code Online (Sandbox Code Playgroud)

Ste*_*n C 5

如果您想要锻炼好奇心,请转到Java Bugs数据库页面,然后使用InternalErrorUnknownError作为关键字搜索错误.

这些报告几乎都是有人设法导致InternalErrorUnknownError发生的错误......而不仅仅是理论上的可能性.

注意:

  • 大多数这些错误可能都是历史性的; 即在早期版本的Java中修复.(但后来你没有明确说明你在谈论哪个版本.最近的版本?通常是谁?)

  • 许多旧的错误似乎都被隐藏在公众视野之外.当您单击搜索结果中的链接时,它会将您带回搜索.(如果你不喜欢它,请向Oracle抱怨......不是我.)


除了报告的错误之外,如果您准备干扰Java安装(例如调整"rt.jar"文件)或在本机代码中乱七八糟,可能会有很多方法导致这些错误发生.