[英]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.