1

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

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

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

4

2 回答 2

4

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

于 2013-07-04T16:42:04.430 回答
-2

如果我得到您想要完成的任务,您希望计算在您的应用程序中创建的 MyClass 实例的数量。如果是这种情况,您需要将实例变量和 getInstances 方法声明为静态。

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

此外,我会将实例重命名为 instanceCount(或简单地计数)并对 getInstances 方法进行相同的重命名。

于 2013-07-04T16:45:20.697 回答