JavaWeb应用中,static变量的值是一直存在的吗?

rongxh7 2010-04-19 01:53:54
class Person {
private int id;
private String name;
//构造方法和getter、setter方法
}

class Mapping {
private static Map<String, Person> personMap;
//static的getter和setter方法
}


在Filter的init方法中,或者在Servlet的init方法中初始化Mapping中的personMap,代码如下:
 public void init(FilterConfig fConfig) throws ServletException {
Map<String, Person> map = new HashMap<String, Person>();
for(int i = 0 ; i < 100 ; i ++ ) {
String name = "name_" + i;
Person person = new Person(i, name);
map.put(name, person);
}
Mapping.setPersonMap(map);
}


服务器(Tomcat)在启动时,会调用该Filter的init方法(代码如上)。
服务器一直运行了1000天,请问:
Mapping类中的personMap一直存在吗?personMap里面的所有person的id和name的值一直存在吗?

补充:
如果该网站,自第一天,有人浏览了(即发送了请求),往后100天没有访问,(服务器仍在运行),直到101天,又一人访问了,(注意:我测试过,Filter的init不会重复执行,只在服务器启动时执行),请问,此时,Mapping中的所有person连同它们的id和name还会存在吗?
...全文
416 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
rongxh7 2010-04-19
  • 打赏
  • 举报
回复
呵呵,
明白了,谢谢各位的指导!
loocao 2010-04-19
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 rongxh7 的回复:]
引用 7 楼 wolfkingty 的回复:
Filter的静态成员,能持久存在,那么其他类(如Mapping)的静态成员(personMap)能不能持久存在?
我测试时,Mapping中的personMap是一直存在的(当其他的请求,在别处调用Mapping.getPersonMap()时,值是存在的),但不知道会不会因为100天内不访问时,会不会被回收掉?[/Quote]

100天不访问,会被回收?...哈哈...
楼主也忒搞笑了吧...如果真是这样,那岂不是100天没人访问我的网站,会自己死掉?
小霍夫 2010-04-19
  • 打赏
  • 举报
回复
你为什么总是以100为边界呢?

如果会回收,那么 你就不能访问任何一个资源了!任何一个servlet,任何服务器的任何组件也不能为你处理请求了!因为同样销毁了!

很显然是不会的!
rongxh7 2010-04-19
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wolfkingty 的回复:]
Java code

public void init(FilterConfig fConfig) throws ServletException {
Map<String, Person> map = new HashMap<String, Person>();
for(int i = 0 ; i < 100 ; i ++ ) {
String nam……
[/Quote]

Filter的静态成员,能持久存在,那么其他类(如Mapping)的静态成员(personMap)能不能持久存在?
我测试时,Mapping中的personMap是一直存在的(当其他的请求,在别处调用Mapping.getPersonMap()时,值是存在的),但不知道会不会因为100天内不访问时,会不会被回收掉?
小霍夫 2010-04-19
  • 打赏
  • 举报
回复
sorry!
你说的那样是会存在的!刚才看走眼了! 下面Mapping一个类!

你可以在容器开了后去测试!
任何一个地方去
Maping.personMap.size();


除非你后面重新 去set(null)那么原来的就销毁!
小霍夫 2010-04-19
  • 打赏
  • 举报
回复

public void init(FilterConfig fConfig) throws ServletException {
Map<String, Person> map = new HashMap<String, Person>();
for(int i = 0 ; i < 100 ; i ++ ) {
String name = "name_" + i;
Person person = new Person(i, name);
map.put(name, person);
}
Mapping.setPersonMap(map);
}

这个map不是可能保存的!


public class MyFilter implements Filter{

private static Map<String, Person> map;

public void destroy() {


}

public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException {


}

public void init(FilterConfig config) throws ServletException {
map = new HashMap<String, Person>();
for(int i = 0 ; i < 100 ; i ++ ) {
String name = "name_" + i;
Person person = new Person(i, name);
map.put(name, person);
}
Mapping.setPersonMap(map);

}


}


staic 是类的成员,与对象无关。对象没有产生时他产生了! 如果这下面这样。
自然而然是在web服务器当中的
chenying0804 2010-04-19
  • 打赏
  • 举报
回复
我觉得应该是存在的
rongxh7 2010-04-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wolfkingty 的回复:]
Map 作用域在方法之内,出了这个方法。那么这个引用所指的堆里面的内容就会被自动回收!

很显然。。是不存在的!


我很好奇。。你问题是 关健字static 但是,所列代码没一个static !
[/Quote]
我指的Mapping类中的静态变量:
private static Map<String, Person> personMap;
nornand 2010-04-19
  • 打赏
  • 举报
回复
参见楼上
小霍夫 2010-04-19
  • 打赏
  • 举报
回复
Map 作用域在方法之内,出了这个方法。那么这个引用所指的堆里面的内容就会被自动回收!

很显然。。是不存在的!


我很好奇。。你问题是 关健字static 但是,所列代码没一个static !
gagucheng 2010-04-19
  • 打赏
  • 举报
回复
顶1喽
loocao 2010-04-19
  • 打赏
  • 举报
回复
只要不第二次 Mapping.setPersonMap(map);
里面的Person一存在.

81,092

社区成员

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

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