这是计算对象实例的有效方法吗?或者我不应该覆盖finalize?
public class MyClass{
private int instances;
public MyClass(){
instances++;
}
@Override
public void finalize(){
instances--;
}
public static int getInstances(){
return instances;
}
}
解决方案不一定是线程安全的
答案 0 :(得分:4)
将instances
标记为static volatile
。其次,从不覆盖finalize
方法。此外,在代码AS-IS中,请注意您无法访问instances
方法中的public static int getInstances
变量。
答案 1 :(得分:-2)
如果我得到你想要完成的任务,你想要计算在你的应用程序中创建的MyClass实例的数量。如果是这种情况,则需要声明实例变量和getInstances方法静态。
public class MyClass{
private static int instances;
public MyClass(){
instances++;
}
@Override
public void finalize(){
instances--;
}
public static int getInstances(){
return instances;
}
}
另外,我会将实例重命名为instancesCount(或简单地计数),并为getInstances方法执行相同的重命名。