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

NoClassDefFoundError和ClassNotFoundException之间的原因和

NoClassDefFoundError和ClassNotFoundException之间的原因和

忽然笑 2019-05-31 12:56:10
NoClassDefFoundError和ClassNotFoundException之间的原因和区别是什么?.之间的区别是什么?NoClassDefFoundError和ClassNotFoundException?是什么让他们被扔出去的?如何解决这些问题?在修改现有代码以包含新的JAR文件时,我经常会遇到这些可移植性。我已经在客户端和服务器端为通过Webstart分发的java应用程序命中了它们。我遇到的可能原因:未包括在build.xml用于代码的客户端我们正在使用的新JAR缺少运行时类路径版本与以前的JAR冲突当我今天遇到这些问题时,我会采取一种反复的方法来让事情正常运转。我需要更多的清晰和理解。
查看完整描述

4 回答

?
手掌心

TA贡献1942条经验 获得超3个赞

与JavaAPI规范的区别如下。

ClassNotFoundException:

当应用程序试图通过其字符串名称加载类时引发:

  • 这个

    forName

    课堂方法

    Class.

  • 这个

    findSystemClass

    课堂方法

    ClassLoader.

  • 这个

    loadClass

    课堂方法

    ClassLoader.

但是,无法找到具有指定名称的类的定义。

NoClassDefFoundError:

如果Java虚拟机或ClassLoader实例尝试加载类的定义(作为普通方法调用的一部分或作为使用新表达式创建新实例的一部分),因此无法找到该类的定义。

编译当前执行的类时存在搜索类定义,但无法再找到该定义。

所以,看来NoClassDefFoundError在成功编译源时发生,但在运行时,需要class没有找到文件。这可能是在JAR文件的分发或生产过程中发生的事情,在这种情况下,并不是所有必需的class文件包括在内。

至于ClassNotFoundException,它看起来可能源于尝试在运行时对类进行反射调用,但是程序试图调用的类并不存在。

两者的区别在于,其中一个是Error另一个是Exception。带着NoClassDefFoundErrorError这是因为Java虚拟机在查找它希望找到的类时遇到了问题。预期在编译时工作的程序无法运行,因为class未找到的文件,或与编译时生成或遇到的文件不同.这是一个非常严重的错误,因为程序不能由JVM启动。

另一方面,ClassNotFoundExceptionException,因此,这是某种程度上的预期,是可以恢复的。使用反射是很容易出错的(因为有些人期望事情不会像预期的那样进行。)没有编译时检查以确保所有必需的类都存在,因此在找到所需的类时,任何问题都会在运行时出现。


查看完整回答
反对 回复 2019-05-31
?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

NoClassDefoundError基本上是一个链接错误。当您尝试并实例化一个对象时(静态地用“New”),在编译期间找不到它。

ClassNotFoundException更通用,当您尝试使用不存在的类时,它是一个运行时异常。例如,函数中有一个参数接受一个接口,并且有人传入一个实现该接口的类,但是您不能访问这个类。它还包括动态类加载的情况,例如使用loadClass()或Class.forName()。


查看完整回答
反对 回复 2019-05-31
  • 4 回答
  • 0 关注
  • 1378 浏览

添加回答

举报

0/150
提交
取消
微信客服

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

帮助反馈 APP下载

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

公众号

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