`
dxm1986
  • 浏览: 429581 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JAVA NoClassDefFoundError:

    博客分类:
  • java
 
阅读更多

NoClassDefFoundError:

我所遇到出现以上错误的情况,有如下三种:

1 JAR重复引入,版本不一致导至

2 打程序版本时,没有把关联类打出去(这种情况一般是)

java.lang.nosuchmethoderror

3 还有一种情况是A引用B时,B初始化失败时也会导致以上的错误出现。

 

以上第三种情况,我们好几个人花了一个晚上才把问题搞清楚,A类引用B类,B类读取一个**.properties

程序中写的是读取**.properties 但properites名字写的是**_zh.properties 如果环境字符集为中文时,这是没有问题的,可是偏偏有几台服务器的默认字符集是US ,当时又因为正常服务器是32 tomcat6,后者是64 tomcat7 ,再加上日志也没有打好,更本不打错误日志。。。。然后,然后,,,,一直弄了好几个小时。晕了。通宵了一个晚上,已经写不清楚了,不写了。下面是两种错语的定议:

ClassNotFoundException发生在装入阶段。 
当应用程序试图通过类的字符串名称,使用常规的三种方法装入类,但却找不到指定名称的类定义时就抛出该异常。

NoClassDefFoundError: 当目前执行的类已经编译,但是找不到它的定义时

也就是说你如果编译了一个类B,在类A中调用,编译完成以后,你又删除掉B,运行A的时候那么就会出现这个错误

加载时从外存储器找不到需要的class就出现ClassNotFoundException 
连接时从内存找不到需要的class就出现NoClassDefFoundError

大概这样的吧,JDK API里面的解释 
1.NoClassDefFoundError 
当 Java 虚拟机或 ClassLoader 实例试图在类的定义中加载(作为通常方法调用的一部分或者作为使用 new 表达式创建的新实例的一部分),但无法找到该类的定义时,抛出此异常。 
当前执行的类被编译时,所搜索的类定义存在,但无法再找到该定义。

2.ClassNotFoundException 
当应用程序试图使用以下方法通过字符串名加载类时,抛出该异常: 
* Class 类中的 forName 方法。 
* ClassLoader 类中的 findSystemClass 方法。 
* ClassLoader 类中的 loadClass 方法。 
但是没有找到具有指定名称的类的定义。从 1.4 版本开始,此异常已经更新,以符合通用的异常链机制。在构造时提供并通过 getException() 方法访问的“加载类时引发的可选异常”,现在被称为原因,它可以通过 Throwable.getCause() 方法以及与上面提到的“遗留方法”来访问。

2
3
分享到:
评论
2 楼 cheetah747 2015-09-02  
我也遇到这个问题了,不过我是直接把第三方jar放到工程文件的libs文件夹里解决的。。。原来调用第三方jar不仅要在属性里添加,还要把文件给放在libs里面。。。。
1 楼 zfj_0928 2012-05-23  
正在纠结ClassNotFoundException 和NoClassDefFoundError 的区别呢 在这里找到答案了!!

相关推荐

Global site tag (gtag.js) - Google Analytics