Java中如何统计某个类当前所生成的对象的个数?

ZFSDKD 2008-11-14 09:25:01
一般在C++的学习过程中,学习到static成员的时候,都会举统计对象个数的例子,在Java中也可以用同样的实现方法。比如,学生类Student,其中添加代码:
class Student{
public static int num;
public Student(){
num++;
}
}

这样每次new一个Student的时候都可以给num加1,从而实现对象的计数。但由于java中没有析构方法,所以无法析构,从而导致num无法减1。java中虽然提供了finalize方法,但是该方法未必会被调用,这样可能无法满足要求。现在的要求是:当一个Student对象没有用的时候,需要释放其内存,并将num减1,那么该如何实现呢?
...全文
2278 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
lxxzhy 2008-11-26
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 angeltom 的回复:]
你所说的内容还是仅仅在增加的时候计算了对象的个数,我关心的是在对象需要减少的时候怎么办。比如,在一个学生信息系统中,一个学生退学了,这个时候应该删除该对象,哪怕内存中不删除,但是对象的个数,即num是应该减1的。当然,一般的学生信息系统不会这样来统计对象个数,但现在仅仅是为了解决这个问题,即,num如何在适当的时候减1的问题。
[/Quote]
这就是你business的问题了,所谓的适当时候就是学生退学的时候,你在退学的方法最后把num减一不就行了么?
Successman2013 2008-11-26
  • 打赏
  • 举报
回复
关注, 学习!
豆大仁 2008-11-26
  • 打赏
  • 举报
回复
估计LZ实际中的问题就是11楼LZ写的那些。答案同上。
zhls00000 2008-11-25
  • 打赏
  • 举报
回复
新手,mark
zhuyx808 2008-11-25
  • 打赏
  • 举报
回复
等高手来解答
llpoo 2008-11-20
  • 打赏
  • 举报
回复
能不能让这个类继承线程?线程要生要死随我管,计算应该也是可以计算的
mealeee 2008-11-20
  • 打赏
  • 举报
回复
加一个方法
public deleteStudent(Student student){
num--;
student = null;
}
在程序中控制调用这个方法就行啦
tz_dzg 2008-11-19
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 MinThinking 的回复:]
19楼的办法行吗?t1=null时对象回不回收并不确定,而这是调用function方法进行--操作,是不是不合理?有人解释下吗?
[/Quote]

要想确定回收还不简单,直接在t1=null 后面加个System.gc();
jxxx2967 2008-11-19
  • 打赏
  • 举报
回复
似乎没有合适的方法。
MinThinking 2008-11-19
  • 打赏
  • 举报
回复
19楼的办法行吗?t1=null时对象回不回收并不确定,而这是调用function方法进行--操作,是不是不合理?有人解释下吗?
ZFSDKD 2008-11-18
  • 打赏
  • 举报
回复
各位高手,是不是只能像19楼这样做了?
tz_dzg 2008-11-18
  • 打赏
  • 举报
回复
静态方法的办法如下



public class T {
private static int i = 0;

public T() {
i++;
}

public static int getNumber() {
return i;
}

public static void function(){
i--;
}

public static void main(String[] args) {
T t1 = new T();
T t2 = new T();
T t3 = new T();
T t4 = new T();
System.out.println("一共创建了" + T.getNumber() + "个对象");
t1=null;
T.function();
t2=null;
T.function();
....
....
}
}

}

Fighting_lgq 2008-11-18
  • 打赏
  • 举报
回复
用一些监控软件就好了
ZFSDKD 2008-11-17
  • 打赏
  • 举报
回复
是啊,加1的时候是自动的,因为new的时候调用了构造方法,而释放的时候怎么办?在哪里调用14楼所说的静态方法呢?
msoss 2008-11-17
  • 打赏
  • 举报
回复
楼上说的简单,如何实现呢,主要是这个静态方法怎么会被调用.
tz_dzg 2008-11-17
  • 打赏
  • 举报
回复
静态变量不属于具体的对象,属于类,所有每个对象创建时都会加一,要想减一并不一定要析构函数来做,你可以写个静态方法不就OK了,很简单的嘛,静态方法也属于类,不属于对象,在静态方法中减一不就实现了
ZFSDKD 2008-11-17
  • 打赏
  • 举报
回复
你所说的内容还是仅仅在增加的时候计算了对象的个数,我关心的是在对象需要减少的时候怎么办。比如,在一个学生信息系统中,一个学生退学了,这个时候应该删除该对象,哪怕内存中不删除,但是对象的个数,即num是应该减1的。当然,一般的学生信息系统不会这样来统计对象个数,但现在仅仅是为了解决这个问题,即,num如何在适当的时候减1的问题。
ZFSDKD 2008-11-17
  • 打赏
  • 举报
回复
你所说的内容还是仅仅在增加的时候计算了对象的个数,我关心的是在对象需要减少的时候怎么办。比如,在一个学生信息系统中,一个学生退学了,这个时候应该删除该对象,哪怕内存中不删除,但是对象的个数,即num是应该减1的。当然,一般的学生信息系统不会这样来统计对象个数,但现在仅仅是为了解决这个问题,即,num如何在适当的时候减1的问题。
ZFSDKD 2008-11-17
  • 打赏
  • 举报
回复
你所说的内容还是仅仅在增加的时候计算了对象的个数,我关心的是在对象需要减少的时候怎么办。比如,在一个学生信息系统中,一个学生退学了,这个时候应该删除该对象,哪怕内存中不删除,但是对象的个数,即num是应该减1的。当然,一般的学生信息系统不会这样来统计对象个数,但现在仅仅是为了解决这个问题,即,num如何在适当的时候减1的问题。
shenjie1989 2008-11-17
  • 打赏
  • 举报
回复
不需要,有垃圾回收器
加载更多回复(11)

62,615

社区成员

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

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