为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我在Java中获得NoClassDefFoundError?

为什么我在Java中获得NoClassDefFoundError?

呼唤远方 2019-05-23 13:13:57
为什么我在Java中获得NoClassDefFoundError?NoClassDefFoundError当我运行我的Java应用程序时,我得到了一个。这通常是什么原因?
查看完整描述

3 回答

?
茅侃侃

TA贡献1842条经验 获得超21个赞

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


查看完整回答
反对 回复 2019-05-23
?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

虽然这可能是由于编译时和运行时之间的类路径不匹配,但它不一定是真的。

在这种情况下,重要的是要保持两到三个不同的例外:

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

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


查看完整回答
反对 回复 2019-05-23
?
慕慕森

TA贡献1856条经验 获得超17个赞

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


查看完整回答
反对 回复 2019-05-23
  • 3 回答
  • 0 关注
  • 1324 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号