如何获取类的实例

时间:2009-12-21 06:39:01

标签: java

我在同一个包中创建了三个类classA,classB和classC。现在我在classB中创建了classA的三个对象,在classC中创建了classA的两个对象。现在我怎样才能在classA中得到以下内容。

1)classB和classC使用了classA的多少个对象? 2)我怎样才能得到这个名字& classA和classC中classA对象的引用?

3 个答案:

答案 0 :(得分:2)

对于实例总数,您可以在A类中拥有一个静态变量。静态变量是一个基于类本身而不是实例的变量,其定义如下:

private static int totalInstances = 0;

然后在A类的构造函数中,您只需递增该变量,并在析构函数中递减它。

然后,您可以为此变量创建一个访问者

public int getTotalInstances(){
    return totalInstances;
}

然后你就可以获得像这样的实例总数:

classA.getTotalInstances()

确保将其设为类名而不是实例名。

如果你想跟踪引用变量,可以创建一个引用变量的静态数组,并在每次创建对象时添加引用,方法与我们增加总实例的方式相同:)

答案 1 :(得分:1)

除非您向每个A对象的c'tor提供“所有者”的引用,否则不能。

答案 2 :(得分:0)

如果你这样做:

public class B {
  private a1 = new A();
  private a2 = new A();
  private a3 = new A();
}

public class C {
  private a1 = new A();
  private a2 = new A();
}

,然后您可以使用反射API查找类型A的类成员并计算该类型的所有非null成员并反映A个实例以获取对象名称 (假设您有一种A#getName()方法)。

如果你这样做(只有B的代码):

public class B {
   public B() {
     new A();
     new A();
     new A();
   }
 }

,没有机会“查看B实例”并告诉我,已经创建了多少个A.唯一的办法就是像Dominic建议的那样对A类进行测试。但它不会告诉你,有多少A存在,到目前为止已经创造了多少A。

如果您需要更多详细信息,请使用众多分析器中的一个。