这是计算对象实例的有效方法吗?

这是计算对象实例的有效方法吗? 或者我不应该覆盖finalize?

public class MyClass{ private int instances; public MyClass(){ instances++; } @Override public void finalize(){ instances--; } public static int getInstances(){ return instances; } } 

解决方案不必是线程安全的

instances标记为static volatile 。 其次, 永远不要覆盖finalize方法。 此外,在代码AS-IS中,请注意您无法访问public static int getInstances方法中的instances变量。

如果我得到你想要完成的任务,你想要计算在你的应用程序中创建的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方法执行相同的重命名。