Java静态内部类初始化错误

4

背景: java.io.File类有一个静态内部类方法,如下所示:

    LazyInitialization.temporaryDirectory();

[编辑以添加更多代码] 我的下面代码最终会调用上面的那行代码。在temporaryDirectory()方法中抛出了一个异常,在我的情况下这是可以接受/预期的。

try {
    File tempFile = File.createTempFile("aaa", "aaa");
} catch (Exception e) {
    // handle exception 
}

然后,当我再次调用相同的方法(createTempFile)时,我会得到一个“java.lang.NoClassDefFound错误 - 无法初始化类java.io.File $ LazyInitialization”

问题: 我认为内部类LazyInitialization应该在静态方法被调用时由类加载器加载,即使内部方法抛出异常。那么,为什么第二次调用时会看到NoClassDefFound错误?原始假设是否不正确?


我认为它应该能够工作。请展示你的代码。 - thejh
1个回答

7
当静态初始化代码抛出运行时异常时,它会被ExceptionInInitializerError包装,并在触发类加载的代码上下文中抛出(如果是Error异常,则不会被包装)。此时,该类加载失败。因此,任何后续尝试使用它都将导致NoClassDefFoundError错误。
也许这就是您所遇到的情况。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接