最近做项目时,写了一个管理本地资源的类,并且将这个类中所有的方法、参数都用static修饰。运行起来是没啥问题,但是有一定概率会出现java.lang.NoClassDefFoundError的异常。
这个错误发生的原因是因为类没有被加载,不同于ClassNotFoundException异常,后者属于编译时异常,表示在项目目录中根本没有目标类(.class/.java)。而java.lang.NoClassDefFoundError是运行是异常,表示项目目录中一定存在目标类(.class/.java),否则不可能通过编译。
因为我在项目中,将这个类的所有方法都用static修饰了,所以导致了这个类从来没有被初始化过,这也就是产生异常的主要原因。解决方式也很简单,将该类用单例模式的写法重构一下。比如:
//改造之前,全static修饰的类
public class Test{
private static int MAX = 3;
public static int getMax(){
return MAX;
}
public static void setMax(int i){
MAX = i;
}
}
改造为单例模式之后:
//改造之后,单例类
public class Test{
private static Test test;
private int MAX = 3;
private Test(){
}
public static Test instance(){
if (test == null) {
test = new Test();
}
return test;
}
public int getMax(){
return MAX;
}
public void setMax(int i){
MAX = i;
}
}