其壹破绽百出发生只在运行时必要加载对应的类不成功,NoClassDefFoundError错误的产生

NoClassDefFoundError错误的发出,是因为Java虚拟机在编写翻译时能找到确切的类,而在运维时不可能找到适当的类导致的失实。举例在运作时大家想调用有些类的章程依旧访问那么些类的静态成员的时候,开掘那么些类不可用,此时Java虚拟机就会抛出NoClassDefFoundError错误。与ClassNotFoundException的例外在于,那个张冠李戴产生只在运转时索要加载对应的类不成事,而不是编译时发生。大多Java开辟者很轻巧在此地把那多少个谬误搞混。
我的拍卖方法是,将这几个类删除重建,让这一个类重新加载,简单残忍。
详见排查方案见http://blog.csdn.net/jamesjxin/article/details/46606307

NoClassDefFoundError错误发生的缘故

NoClassDefFoundError错误的发生,是因为Java虚拟机在编译时能找到适当的类,而在运转时不能够找到适合的类导致的荒谬。举个例子在运维时大家想调用有些类的不二秘诀依然访问这些类的静态成员的时候,发现那一个类不可用,此时Java虚拟机就会抛出NoClassDefFoundError错误。与ClassNotFoundException的例外在于,那些错误产生只在运维时必要加载对应的类不成事,而不是编写翻译时发出。

差不离总括正是,NoClassDefFoundError产生在编写翻译时对应的类可用,而运作时在Java的classpath路线中,对应的类不可用导致的谬误。

NoClassDefFoundError和ClassNotFoundException区别

NoClassDefFoundError发生在JVM在动态运维时,依照你提供的类名,在classpath中找到呼应的类实行加载,但当它找不到那几个类时,就生出了java.lang.NoClassDefFoundError的错误,而ClassNotFoundException是在编写翻译的时候在classpath中找不到对应的类而发出的不当。ClassNotFoundException比NoClassDefFoundError轻易消除,是因为在编写翻译时我们就知晓不当产生,并且完全是由于意况的难题导致。而只要您在J贰EE的条件下办事,并且得到NoClassDefFoundError的百般,而且对应的一无可取的类是真的存在的,那表明那个类对于类加载器来讲,恐怕是不可知的。

怎么消除NoClassDefFoundError错误

很强烈NoClassDefFoundError的不当是因为在运营时类加载器在classpath下找不到需求加载的类,所以大家供给把相应的类加载到classpath中,恐怕检查为啥类在classpath中是不可用的,那一个发生或许的来由如下:

一.一往情深的Class在java的classpath中不可用

你恐怕用jar命令运营你的次第,但类并不曾在jar文件的manifest文件中的classpath属性中定义

二.大概程序的运行脚本覆盖了原本的classpath意况变量

因为NoClassDefFoundError是java.lang.LinkageError的叁个子类,所以大概出于程序依赖的原生的类库不可用而变成

三.反省日志文件中是或不是有java.lang.ExceptionInInitializerError那样的荒唐,NoClassDefFoundError有比异常的大希望是出于静态起初化失利产生的

如果你事业在J二EE的条件,有多少个例外的类加载器,也大概导致NoClassDefFoundError