java.lang.NoClassDefFoundError


这个错误是猝不及防的来了,当我搜索的时候,发现网上有许多文章,但是对于一个没有仔细思考,想快速找一个与自己的情况相匹配的解答,快速解决问题,反而会越忙越慌,很不容易。


我的情况是第一个类调用第二个类中的静态模块,或者静态变量,报了这个错误。


class ThingsHappen{

    public void blueSky(){

        ClassInitErrorNoDef.instance

        //.....

    }    

}

class ClassInitErrorNoDef{

    public final static ClassIinitErrorNoDef instance=new ClassInitErrorNoDef();

    private ClassInitErrorNoDef(){

      //做一些产生异常的事情,有没有try,catch

    }

}

这样子第二个类ClassInitErrorNoDef,初始化的时候就会报错误,但是你没有try catch住,那么你在日志中也不会发现抛出了异常,那么第一个类的运行时候就会报这个错误,但是你还在想,这个类明明存在


解决办法,就是检查第二个类出现了什么样的异常。

与之伴随的会有这么种异常抛出:

段1错误:at com.utravel.demo.error.ClassWithInitErrors.<clinit>

java.lang.ExceptionInInitializerError


段2错误:java.lang.NoClassDefFoundError: Could not initialize class com..demo.error


段2错误是在段1出现之后,直接抛出noClassDeffFoundError,不会再抛出初始化ClassWithInitErrors错误。