为什么java中会出现noclassdeffounderror?

ars1skjm  于 2021-08-25  发布在  Java
关注(0)|答案(17)|浏览(559)

我得到一份工作 NoClassDefFoundError 当我运行java应用程序时。典型的原因是什么?

pvcm50d1

pvcm50d116#

下面是要说明的代码 java.lang.NoClassDefFoundError . 详细解释请参见jared的回答。
noclassdeffounderrordemo.java

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;
}
czfnxgou

czfnxgou17#

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

相关问题