日期:2014-05-20  浏览次数:20699 次

求教!!关于java全局变量的问题
在java中定义全局变量
public   class   Aclass{
        public   static   String   ID_3   =   "3 ";  
}
在某个servlet中我通过Aclass.ID_3= '4 ',对其引用修改ID_3这个值,其他用户在别的机器上访问Aclass.ID_3的值也变成‘4’了。
我想知道如何能够定义一个变量在我的机器运行Aclass.ID_3=4值改变但不影响在其他机器上运行的用户。就象session中保存的变量一样,各用户之间户不影响。在对自己来说是全局有效的。
请高手指点,谢谢。请说的详细些,本人java水平不高。

------解决方案--------------------
这个我没试过
试试ThreadLoacl这个类,可以保存当前线程的变量,查查API
------解决方案--------------------
public class Aclass{
public String ID_3 = "3 ";
}
引用时候 new Aclass().ID_3即可
public class Aclass{
public static String ID_3 = "3 ";
}
这样写就是类变量,你改了,别人也变
------解决方案--------------------
因为Aclass是放在服务器上,那么无论你客户端有多少个,Aclass只有一个,存在于服务器程序的jvm的生命周期中,它的静态变量的生命周期也和class的生命周期一样长,而且和class一样,只有一份,大家共用。为了让大家互相不影响,那么必须要区别各个client,所以出现了session这个容器。web服务器自动为我们创建了很多份实例。如果要自己用,不让别人用,只好自己做一个copy,和别人无关。不能把变量定义成static,否则大家都在用。
------解决方案--------------------
session对你来说就已经差不多算是全局的了,定义成static总是要小心,就如同楼上所说,Aclass只有一个,你的变量有时累级别的。
------解决方案--------------------
你定的是static静态变量,是属于类的层面的,而不是类的实例,所以这个类里所有的实例都会变。
------解决方案--------------------
学习
------解决方案--------------------
首先在java中不要提全局变量,一个类的static变量在jvm范围内是唯一的,你的要求是相当于对每一个客户维护一个客户信息,直接放到session里就是了。
------解决方案--------------------
public ConstVar {
   public static HashMap <Aclass> ConstVarMap = new HashMap <Aclass> ();
}

public class Aclass{
public String ID_3 = "3 ";
}

用户登陆的时候
Aclass aclass = new Aclass();
aclass.ID_3 = "你需要的值 ";
ConstVar.ConstVarMap.put(userid,aclass);

用的时候
System.out.println(ConstVar.ConstVarMap.get(userid).ID_3);

退出的时候
ConstVar.ConstVarMap.remove(userid);



------解决方案--------------------
public ConstVar {
public static HashMap <> ConstVarMap = new HashMap <> ();
}

public class Aclass{
public String ID_3 = "3 ";
}

登陆的时候
Aclass aclass = new Aclass();
aclass.ID_3 = "what you want! ";
ConstVar.ConstVarMap.put(userid,aclass);

使用的时候
System.out.println(ConstVar.ConstVarMap.get(userid).ID3);

退出的时候
ConstVar.ConstVarMap.remove(userid);

------解决方案--------------------
wdman(只会Java,郁闷!) 写的正确
------解决方案--------------------

--------------------------------------------

楼上的楼上 。。正解!!!!

--------------------------------------------