繁体   English   中英

java静态内部类初始化错误

[英]java static inner class initialization errors

上下文: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错误? 最初的假设是否正确?

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

也许这就是您的经验。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM