是否可以计算一个类创建了多少和哪些对象?

时间:2014-01-08 09:51:57

标签: java oop object

这里我为C类创建了一个Object,由于继承机制,它可以创建三个对象(C,B和A)。我通过查看代码来计算。但我想通过程序化的盟友来计算。我的意思是,是否有可能计算出我的班级创造的物品怎么样?它们是什么?

以下是我的代码:

class A {
A() {       
    System.out.println("class A");
}
}
class B extends A {
B() {        
    System.out.println("class B");
}
}
class C extends B {
public static void main(String args[]) {
    C c = new C();
}
}

4 个答案:

答案 0 :(得分:1)



    class A {
    static int a;
    {       
        System.out.println("class A , "+ (++a));
    }
    }
    class B extends A {
    static int b;
    {        
        System.out.println("class B ,"+ (++b));
    }
    }
    class C extends B {
    static int c;
    {
       System.out.println("class C ,"+ (++c));
    }
    public static void main(String args[]) {
        C c = new C();
    }
    }


不使用构造函数中的递增计数器,而是使用init块来递增计数器。 当您不使用default或no-arg构造函数创建对象时,这将对您有所帮助。

答案 1 :(得分:0)

不是"自动",但您可以添加代码来执行此操作:

class A {
    private static List<A> instances = new ArrayList<>();     
    A() {
        if (instances.size() > 2)
            throw new IllegalStateException("may not create more than 3 instances");
        instances.add(this);
        System.out.println("class A");
    }
    public static List<A> getInstances() {
        return instances;
    } 
}

答案 2 :(得分:0)

通过使用static int类型的计数器可以找到创建特定类的对象的数量。喜欢:

Class A {
 public:  static int count = 0;
A(){
// inside constructor increment the counter for each constructor call
count ++;
}
void totalCount(){
System.out.print(count);
}
}

然后调用totalCount()方法以显示创建的对象数。希望这会有所帮助..

答案 3 :(得分:0)

你可以这样试试。

public class   A {
static int i;
List<Integer> instanceA=new ArrayList<>();
A() {
    instanceA.add(++i);
    System.out.println("class A");
}
}

public class B extends A{
static int i;
List<Integer> instanceB=new ArrayList<>();
B() {
    instanceB.add(++i);
    System.out.println("class B");
  }
}

public class C extends B {
static int i;
List<Integer> instanceC = new ArrayList<>();

C() {
    instanceC.add(++i);
}

public static void main(String args[]) {
    C c = new C();
    System.out.println("Number of C"+c.instanceC);
    System.out.println("Number of B"+c.instanceB);
    System.out.println("Number of A"+c.instanceA);
 }
}

如果你创建了两个C实例,如下所示。

    C c = new C();
    C c1=new C();
    System.out.println("Number of C"+c1.instanceC);
    System.out.println("Number of B"+c1.instanceB);
    System.out.println("Number of A"+c1.instanceA);

您将获得如下输出

   class A
   class B
   class A
   class B
   Number of C[2]
   Number of B[2]
   Number of A[2]