NoClassDefFoundErrorClassNotFoundException有什么区别?
是什么导致他们被扔的?如何解决这些问题?
在修改现有代码以包含新的JAR文件时,经常会遇到这些抛物面。
对于通过webstart发布的java应用程序,我在客户端和服务器端都对它们进行了测试。
我遇到的可能原因是:
代码客户端的build.xml中未包含的包
我们正在使用的新jar缺少运行时类路径
版本与以前的jar冲突
当我今天遇到这些问题时,我会采取一种循序渐进的方法来解决问题。我需要更多的清晰和理解。

最佳答案

与Java API规范的区别如下。
对于ClassNotFoundException
当应用程序试图
通过类的字符串加载
名称使用:
类中的forName方法。
类中的Class方法。
类中的findSystemClass方法。
但是没有定义
找不到指定的名称。
对于ClassLoader
如果Java虚拟机或
一个loadClass实例试图加载
在类的定义中(作为一部分
普通方法调用的一部分
使用新实例创建新实例
表达式)没有定义
可以找到类。
搜索类定义
当当前执行时存在
类已编译,但定义
找不到了。
因此,ClassLoader似乎是在成功编译源代码时发生的,但是在运行时,找不到所需的NoClassDefFoundError文件。这可能是在JAR文件的分发或生产过程中发生的事情,其中并没有包括所有必需的ClassLoader文件。
至于NoClassDefFoundError,它可能源于在运行时试图对类进行反射调用,但是程序试图调用的类不存在。
两者之间的区别在于一个是class,另一个是class。WithClassNotFoundException是一个Error类,它源于Java虚拟机在查找预期要查找的类时遇到问题。由于未找到Exception文件,或者与编译时生成或遇到的文件不同,预期在编译时工作的程序无法运行。这是一个相当严重的错误,因为程序不能由JVM启动。
另一方面,NoClassDefFoundError是一个Error,因此它在某种程度上是预期的,并且是可恢复的。使用反射可能容易出错(因为有些人认为事情可能不会如预期的那样发展)。没有编译时检查以查看所有必需的类存在,因此在运行时会出现任何发现所需类的问题。

09-30 15:05
查看更多