关于把HashMap设置成静态变量的问题 public static HashMap hmData = new HashMap(); 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我也考虑过New一个对象,但这样每次加载这个类的时候都会新生成一个对象,原来的数据得不到保留了。谢谢maowu(猫呜) !! 不用static怎么保证HashMap中的内容在对象删除之后还一直保留在内存中啊?? 搂主,不会的。只会new一次。 public static HashMap hmData =new HashMap();这样就可以了啊JIVE的缓存机制就是这样的啊 我也考虑过New一个对象,但这样每次加载这个类的时候都会新生成一个对象,原来的数据得不到保留了。 你也说啦 static 属性只在类被加载的情况下才New阿。你的类要加载几次?嗬嗬。 所谓加载,是类被装载到JVM中达到可以使用的情况。每次New并不是装载,只是生成一个实例! public static HashMap hmData =new HashMap();不管你是不是用static变量 你都必须要new一次啊 楼主有什么问题吗 楼主读一下thinking in java可能好一些。 我试过用public static HashMap hmData =new HashMap();了,但第二次再调用的时候原来的值就没有了class test{public static HashMap hmData =new HashMap(); public static void main(){// hmData.put("1","one");// hmData.put("2","two");// hmData.put("3","three"); if(hmData.contain("1")){ System.out.println(hmData.get("1")); } }}我在第一次调用的时候往里面加了三对数据,结果打印出来"one",第二次运行的时候把加数据的几行注释掉,结果是null啊,这是不是说明第一次的数据没保留呢?请大家指点,谢谢! faint,你重新启动了虚拟机,原来的数据肯定没有保留啊。怎么可能保留?用本地文件吧。 你第二次运行的时候,JVM已经退出静态变量或代码的初始化只在加载它所属类被JVM加载时进行注意:往HashMap里面放一些数据,如果是多线程(如jsp/servlet),一定要根据不同情况进行同步处理。如:public static HashMap hmData =new HashMap();synchronized(hmData){ hmData.put("1","one"); }或synchronized public void addData(){ hmData.put("1","one"); } static 只会在类加载的时候调用,你从新启动虚拟机,肯定类又会重新加载在实际情况下你不会经常启动虚拟机吧 “第二次运行的时候把加数据的几行注释掉,结果是null啊,这是不是说明第一次的数据没保留呢?”这样当然不会保留了。倘若你想保留的话,实现串行化方法,把数据存到磁盘上,用的时候再反序列化 某企业面试题,求答案!!! java如何进行多任务管理。 【求教网络通信高手】如何截获非本机MAC地址的数据包 InputStream的read方法 【求解】DataInputStream的一个填空题 实现Tree的一个功能,请教高手 在线求救,高分!!!!!!!!!!! instanceof 刚学java,请问一下Integer类型的compareTo()怎么用? 如何用JBuilder做corba程序 如何JInternalFrame独立显示而不用JFrame容器? 帮忙看看这段发附件邮件代码有什么问题!
不管你是不是用static变量 你都必须要new一次啊 楼主有什么问题吗
class test{
public static HashMap hmData =new HashMap();
public static void main(){
// hmData.put("1","one");
// hmData.put("2","two");
// hmData.put("3","three");
if(hmData.contain("1")){
System.out.println(hmData.get("1"));
}
}
}我在第一次调用的时候往里面加了三对数据,结果打印出来"one",
第二次运行的时候把加数据的几行注释掉,结果是null啊,这是不是说明第一次的数据没保留呢?请大家指点,谢谢!
用本地文件吧。
静态变量或代码的初始化只在加载它所属类被JVM加载时进行注意:往HashMap里面放一些数据,如果是多线程(如jsp/servlet),一定要根据不同情况进行同步处理。
如:public static HashMap hmData =new HashMap();synchronized(hmData){
hmData.put("1","one");
}或synchronized public void addData(){
hmData.put("1","one");
}
在实际情况下你不会经常启动虚拟机吧
这样当然不会保留了。
倘若你想保留的话,实现串行化方法,把数据存到磁盘上,用的时候再反序列化