这是计算对象实例的有效方法吗?
这是计算对象实例的有效方法吗? 或者我不应该覆盖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方法执行相同的重命名。