public 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.java
public class SimpleCalculator {
static int undefined = 1 / 0;
}
17条答案
按热度按时间pvcm50d116#
下面是要说明的代码
java.lang.NoClassDefFoundError
. 详细解释请参见jared的回答。noclassdeffounderrordemo.java
simplecalculator.java
czfnxgou17#
虽然这可能是由于编译时和运行时之间的类路径不匹配造成的,但这不一定是真的。
在这种情况下,在我们的头脑中保持两个或三个不同的例外是很重要的:
java.lang.ClassNotFoundException
此异常表示在类路径上找不到该类。这表明我们试图加载类定义,而类路径上不存在该类。java.lang.NoClassDefFoundError
此异常表示jvm在其内部类定义数据结构中查找了类的定义,但没有找到它。这不同于说它不能从类路径加载。通常这表示我们以前试图从类路径加载一个类,但由于某种原因失败了-现在我们尝试再次使用该类(因此需要加载它,因为它上次失败了),但我们甚至不打算尝试加载它,因为我们之前加载它失败了(并且有理由怀疑我们会再次失败)。早期的故障可能是classnotfoundexception或ExceptionInInitializeError(指示静态初始化块中的故障)或任何数量的其他问题。关键是,noclassdeffounderror不一定是类路径问题。