NoClassDefFoundError产生的原因有好几种,这里记录静态变量或静态块引起的。具体抛出的异常类似:
java.lang.NoClassDefFoundError: Could not initialize class xxx
JVM在加载类的时候,会初始化类里的静态变量,或执行静态块,如果这个时候抛出了异常,该类就会加载失败,那么以后任何使用到这个类的地方,都会抛出NoClassDefFoundError异常,如下面的例子:
/**
* Description: 银行类型枚举
* User: zhouzhou
* Date: 2018-07-18
* Time: 10:55
*/
public enum BankTypeEnum {
CCB("CCB","中国建设银行"),
ABC ("ABC","中国农业银行"),
ICBC ("ICBC","中国工商银行"),
BOC ("BOC","中国银行"),
CMBC ("CMBC","中国民生银行"),
CMB ("CMB","招商银行"),
CIB ("CIB","兴业银行"),
BCM ("BCM","交通银行"),
CEB ("CEB","中国光大银行"),
GDB ("GDB","广东发展银行"),
CITICIB ("CITICIB","中信银行"),
PSBC ("PSBC","中国邮政银行"),
PABC ("PABC","中国平安银行"),
HB ("HB","华夏银行"),
BOG ("BOG","赣州银行","10001"),
JJBANK("JJBANK","九江银行"),
;
public static final String APP = "operator";
public static final String BANK_TYPE = "BankType";
private static RedisCache redisCache = SpringContextUtil.getBean("redisCache");
private static MBankService mBankService = SpringContextUtil.getBean("mBankService");
..... 代码省略
}
当我第一次调用这个类的时候报了异常,是java.lang.ExceptionInInitializerError ......
当第一次初始化失败后, 之后几次调用均报 java.lang.NoClassDefFoundError: Could not initialize BankTypeEnum 异常
由于测试是多次失败后, 把NoClassDefFoundError 异常发给我, 所以追踪异常出现问题, 只有找到ExceptionInInitializerError 的整个错误栈才能找到真正的原因,
解决方案:
1. install所属模块
2.查看错误栈, 是不是这个类启动项目初始化失败了
所以在这里做个笔记, 分享给网友