public class User { private static int userCount = 0; public User () { User.addUserCount(1); } public void finalize() { User.addUserCount(-1); } private static synchonized void addUserCount(int sign) { User.userCount += sign; } public static int getCount() { return User.userCount; } }可以用User.getCount()取得示例个数。
你可以用一个Map来管理所有用户, 用户登录就put到Map中, 用户退出登录就remove掉;
当然最好的办法还是把用户登录状态记录到数据库中, 这样服务器重启才不会导致所有用户的登录状态都丢失
登入就產生一個 User然後加入,登出或timeout就移出。
public class OnLineDemo implements ServletContextListener,HttpSessionListener,HttpSessionAttributeListener
{
// 声明一个ServletContext对象
private ServletContext application = null ;
public void contextInitialized(ServletContextEvent sce)
{
// 容器初始化时,向application中存放一个空的容器
this.application = sce.getServletContext() ;
this.application.setAttribute("alluser",new ArrayList()) ;
} public void contextDestroyed(ServletContextEvent sce)
{} public void sessionCreated(HttpSessionEvent se)
{}
public void sessionDestroyed(HttpSessionEvent se)
{
// 将用户名称从列表中删除
List l = (List)this.application.getAttribute("alluser") ;
String value = (String)se.getSession().getAttribute("uname") ;
l.remove(value) ;
this.application.setAttribute("alluser",l) ;
} public void attributeAdded(HttpSessionBindingEvent se)
{
// 如果登陆成功,则将用户名保存在列表之中
List l = (List)this.application.getAttribute("alluser") ;
l.add(se.getValue()) ;
this.application.setAttribute("alluser",l) ;
}
public void attributeRemoved(HttpSessionBindingEvent se)
{}
public void attributeReplaced(HttpSessionBindingEvent se)
{}
};
//---接口接收实例化Dao对象操作方法
BbsUserDao userDao = new BbsUserDaoImpl();
User userLogin = userDao.LoginUser(uName,pass);
if(userLogin==null)
{
out.print("用户名密码错误,正在返回上一页面");
out.print("<meta http-equiv='refresh' content='2;url="+url+"'>");
return;
}
session.setAttribute("USER",userLogin);
//--创建集合 项application里面添加用户
List<User> listUser = new ArrayList<User>();
//----如果建为alluser的值为空 就创建一个alluser。
if (application.getAttribute("ALLUSER")==null)
{
application.setAttribute("ALLUSER",listUser);
}
//---读出原始数据
listUser = (List<User>)application.getAttribute("ALLUSER");
//---查看是否有重复的用户
boolean rs = true;
for(User us:listUser)
{
if (us.getUid()==userLogin.getUid())
{
rs=false;
break;
}
}
if(rs){
listUser.add(userLogin);
//---在添加至application
application.setAttribute("ALLUSER",listUser);
}
很容易就知道有多少个了
读取也方便些
private static int userCount = 0;
public User () {
User.addUserCount(1);
}
public void finalize() {
User.addUserCount(-1);
}
private static synchonized void addUserCount(int sign) {
User.userCount += sign;
}
public static int getCount() {
return User.userCount;
}
}可以用User.getCount()取得示例个数。
我记得在hashcode的h贴子里我明确指出你从来没有写过hashcode方法,你没有也无法反驳。
现在我同样明确的指出,你没有用过finalize方法或者用过也是错的。