JAVA静态变量的采坑

在进行静态变量操作是一定要小心处理,如果只对静态变量做读操作,可以随便使用,但是如果涉及到静态变量的变更操作,一定要小心加小心,尤其是项目中多处使用静态变量并且有变更操作时。小僧含泪写下此篇,话不多说,我给你念叨下案发现场。

1:首先贴出来项目中使用的静态变量

public class Constant{
public static List<String> cartImportDefaultHeadList = new ArrayList<String>();
static {
                cartImportDefaultHeadList.add("1");
		cartImportDefaultHeadList.add("2");
		cartImportDefaultHeadList.add("3");
                cartImportDefaultHeadList.add("4");
       }

}

2:上面的静态变量分别在方法a和方法b里面使用,方法a根据传过来的标志进行判断是否去掉变量里面的4内容,方法b也是同样的逻辑,具体操作如下。

//方法a
public String a(Integer flag){
     ArrayList<Sting> list=Constant.cartImportDefaultHeadList;
     if(flag==1){
       list.remove("4");
  }
  ..........
}

 

//方法b
public String b(Integer flag){
     ArrayList<Sting> list=Constant.cartImportDefaultHeadList;
     if(flag==1){
       list.remove("4");
  }
  ..........
}

3:问题复现,方法a,b,都需要对flag=1的做特殊处理,当都是非flag=1的情况下,都是正常的,但是一旦出现这样的逻辑就会出现问题,具体流程如下。

1:请求访问a方法,并且flag的不等于1,此时静态变量的值没有变化,值为1,2,3,4

2:请求访问b方法,并且flag等于1,此时静态变量的值发生变化,值为1,2,3

3:在重复步骤1,最后得到的值为1,2,3正确结果应该为1,2,3,4

4:总结
   小僧在这里简单描述了下,实际代码中比这复杂点,当时代码里面已经有现成的静态变量,直接拿来使用了,忽略了这个问题。
5:建议
  有变更操作的尽量在自己方法内部单独创建对应的变量,这边避免别的方法污染。            
在成为大牛的路上还有很多要悟,加油吧,骚年。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值