为什么在Java中收到NoClassDefFoundError?| Java Debug 笔记

209 阅读2分钟

本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看活动链接

为什么在Java中收到NoClassDefFoundError?

我得到一个NoClassDefFoundError运行我的Java应用程序。通常是什么原因造成的?

高分回答:

很多的知识点,真的需要写出来才会掌握!!! \color{purple}很多的知识点,真的需要写出来才会掌握!!!{~}

这是由于存在代码所依赖的类文件,并且该类文件在编译时存在但在运行时未找到。在构建时间和运行时类路径中寻找差异。

高分回答:

尽管这可能是由于编译时和运行时之间的类路径不匹配导致的,但不一定是正确的。

在这种情况下,请务必将两个或三个不同的异常摆在脑海中:

java.lang.ClassNotFoundException此异常表明在类路径上找不到该类。这表明我们正在尝试加载类定义,并且该类在类路径中不存在。

java.lang.NoClassDefFoundError此异常表明JVM在其内部类定义数据结构中查找了类的定义,但未找到。这与说无法从类路径中加载不同。通常,这表明我们以前曾尝试从类路径中加载类,但由于某种原因而失败-现在我们正尝试再次使用该类(因此,由于上次失败,因此需要对其进行加载),但是我们甚至不打算尝试加载它,因为我们之前加载失败(有理由怀疑我们会再次失败)。较早的故障可能是ClassNotFoundException或ExceptionInInitializerError(指示静态初始化块中的故障)或许多其他问题。关键是,NoClassDefFoundError不一定是类路径问题。

高分回答:

这是说明的代码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;
}

文章翻译自kgs4h5t57thfb6iyuz6dqtun5y-ac4c6men2g7xr2a-stackoverflow-com.translate.goog/questions/3…

作者建议:路径不正确,或者需要添加相关的依赖包

欢迎关注我的专栏StackOverFlow,我会筛选优质的问答,面试常考!!! \color{red}欢迎关注我的专栏StackOverFlow,我会筛选优质的问答,面试常考!!!{~}

有最新、优雅的实现方式,我也会在文末写出我对本问答的见解 \color{red}有最新、优雅的实现方式,我也会在文末写出我对本问答的见解{~}

真心感谢帅逼靓女们能看到这里,如果这个文章写得还不错,觉得有点东西的话

求点赞👍 求关注❤️ 求分享👥 对8块腹肌的我来说真的 非常有用!!!

如果本篇博客有任何错误,请批评指教,不胜感激 !❤️❤️❤️❤️