java静态内部类初始化错误

时间:2010-12-13 21:55:22

标签: java inner-classes static-initialization

上下文: 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错误?原始假设不正确吗?

1 个答案:

答案 0 :(得分:7)

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

也许这就是你所经历的。

相关问题