Java中把一个类的所有方法和参数都设置为static时,可能出现java.lang.NoClassDefFoundError

最近做项目时,写了一个管理本地资源的类,并且将这个类中所有的方法、参数都用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;
    }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值