java静态内部类初始化错误

cra*_*rse 4 java inner-classes static-initialization

Context:java.io.File类有一个静态内部类方法如下:

    LazyInitialization.temporaryDirectory();
Run Code Online (Sandbox Code Playgroud)

[编辑添加更多代码]我的代码最终调用上面的代码行.从temporaryDirectory()方法中抛出异常,在我的上下文中很好/期望.

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

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

问题:我假设在调用静态方法时,类加载器应该已经加载了内部类LazyInitialization,即使内部方法引发了异常.然而,为什么我在第二次调用时看到NoClassDefFound错误?原始假设不正确吗?

Eya*_*der 7

当静态初始化代码抛出运行时异常时,它会被ExceptionInInitializerError包装并在触发类加载的代码的上下文中抛出(如果它是一个Error异常,则它不会被包装).此时,类加载失败.因此,以后任何尝试使用它都会导致NoClassDefFoundError.

也许这就是你所经历的.