猿问

为什么我在Java中获得NoClassDefFoundError?

为什么我在Java中获得NoClassDefFoundError?

NoClassDefFoundError当我运行我的Java应用程序时,我得到了一个。这通常是什么原因?



呼唤远方
浏览 1325回答 3
3回答

茅侃侃

这是因为当您的代码依赖于类文件并且它在编译时出现但在运行时未找到时。查找构建时和运行时类路径的差异。

阿波罗的战车

虽然这可能是由于编译时和运行时之间的类路径不匹配,但它不一定是真的。在这种情况下,重要的是要保持两到三个不同的例外:java.lang.ClassNotFoundException 此异常表示在类路径中找不到该类。这表明我们正在尝试加载类定义,并且类在路径上不存在。java.lang.NoClassDefFoundError 此异常表示JVM在其内部类定义数据结构中查找了类的定义但未找到它。这与说它无法从类路径加载不同。通常这表明我们之前尝试从类路径加载一个类,但由于某种原因它失败了 - 现在我们正在尝试再次使用该类(因此需要加载它,因为它上次失败了),但是我们'甚至没有尝试加载它,因为我们之前没有加载它(并且合理地怀疑我们会再次失败)。较早的失败可能是ClassNotFoundException或ExceptionInInitializerError(表示静态初始化块中的失败)或任何其他问题。关键是,NoClassDefFoundError不一定是类路径问题。

慕慕森

这是代码来说明java.lang.NoClassDefFoundError。有关详细说明,请参阅Jared的答案。NoClassDefFoundErrorDemo.javapublic class NoClassDefFoundErrorDemo {     public static void main(String[] args) {         try {             // The following line would throw ExceptionInInitializerError             SimpleCalculator calculator1 = new SimpleCalculator();         } catch (Throwable t) {             System.out.println(t);         }         // The following line would cause NoClassDefFoundError         SimpleCalculator calculator2 = new SimpleCalculator();     }}SimpleCalculator.javapublic class SimpleCalculator {     static int undefined = 1 / 0;}
随时随地看视频慕课网APP

相关分类

Java
我要回答