关于把HashMap设置成静态变量的问题

zsmz 2004-07-02 05:50:46
我现在需要在一个类里面放一个HashMap,往里面放一些数据,每次要从数据库中取数据的时候先查找HashMap,看是否已经存在,若存在就直接提取,若不存在就从数据库中抽取数据之后再放到HashMap中,那是否应该把HashMap设置为类的静态变量啊?

若这样设置public static HashMap hmData ;就无法往hmSpace 中加入数据了,是否应该New一个对象呢?

请高手指点!!!!解决问题一定给分!!!谢谢!!!
...全文
859 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
eclipse0016 2004-07-03
  • 打赏
  • 举报
回复
我倒!无话可说了...
altf4 2004-07-03
  • 打赏
  • 举报
回复
楼主这种情况就是单件嘛。
JohnsonShu 2004-07-03
  • 打赏
  • 举报
回复
楼主读一下thinking in java可能好一些。
dropship 2004-07-03
  • 打赏
  • 举报
回复
“第二次运行的时候把加数据的几行注释掉,结果是null啊,这是不是说明第一次的数据没保留呢?”
这样当然不会保留了。
倘若你想保留的话,实现串行化方法,把数据存到磁盘上,用的时候再反序列化
arkang168 2004-07-03
  • 打赏
  • 举报
回复
static 只会在类加载的时候调用,你从新启动虚拟机,肯定类又会重新加载
在实际情况下你不会经常启动虚拟机吧
flyxxxxx 2004-07-03
  • 打赏
  • 举报
回复
你第二次运行的时候,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");
}
maowu 2004-07-03
  • 打赏
  • 举报
回复
faint,你重新启动了虚拟机,原来的数据肯定没有保留啊。怎么可能保留?
用本地文件吧。
zsmz 2004-07-03
  • 打赏
  • 举报
回复
我试过用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啊,这是不是说明第一次的数据没保留呢?

请大家指点,谢谢!
purejd 2004-07-02
  • 打赏
  • 举报
回复
public static HashMap hmData =new HashMap();
不管你是不是用static变量 你都必须要new一次啊 楼主有什么问题吗
MyXin 2004-07-02
  • 打赏
  • 举报
回复
所谓加载,是类被装载到JVM中达到可以使用的情况。每次New并不是装载,只是生成一个实例!
MyXin 2004-07-02
  • 打赏
  • 举报
回复
我也考虑过New一个对象,但这样每次加载这个类的时候都会新生成一个对象,原来的数据得不到保留了。

你也说啦 static 属性只在类被加载的情况下才New阿。你的类要加载几次?嗬嗬。
lqtflwg718 2004-07-02
  • 打赏
  • 举报
回复
关注!
bluemeteor 2004-07-02
  • 打赏
  • 举报
回复
public static HashMap hmData =new HashMap();

这样就可以了啊

JIVE的缓存机制就是这样的啊
maowu 2004-07-02
  • 打赏
  • 举报
回复
搂主,不会的。只会new一次。
zsmz 2004-07-02
  • 打赏
  • 举报
回复
不用static怎么保证HashMap中的内容在对象删除之后还一直保留在内存中啊??
zsmz 2004-07-02
  • 打赏
  • 举报
回复
我也考虑过New一个对象,但这样每次加载这个类的时候都会新生成一个对象,原来的数据得不到保留了。

谢谢maowu(猫呜) !!
myhotsun 2004-07-02
  • 打赏
  • 举报
回复
为什么要定义为 static呢?
maowu 2004-07-02
  • 打赏
  • 举报
回复
public static HashMap hmData = new HashMap();

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧