-5
class Clasa {...}

class Test {

    public static void main(String[] args){

        Clasa x = new Clasa();
        System.out.println(x.getNo());//displays 1
        Clasa[] y = new Clasa[10];
        for(int i = 0; i<4; i++)
            y[i]=new Clasa();
        System.out.println(y[0].getNo()); //displays 5
    }
}

如何替换这三个点,所以调用 GetNo() 方法返回类 Clasa 的实例化对象的数量。不应更改测试类。

4

2 回答 2

4

添加一个充当计数器的静态变量,并在构造函数中递增它并getNo返回静态变量的值。

静态变量的值保留在类的所有实例中

class Clasa {

    private static int nbInstances = 0;

    public Clasa () {
        nbInstances++;
    }

    public int getNo() {
        return nbInstances;
    }
}
于 2013-07-27T18:02:57.960 回答
0

我同意 Brian 的观点,上面的代码没有考虑 GC。所以我想用下面的代码片段替换你的代码

package com.instance.main;
import com.instance.target.Clasa;

    public class Test{

        public static void main(String[] args) {

        Clasa targetClass;
        Object[] object=new Object[10];
        for(int i=0;i<object.length;i++){
            object[i]=new Clasa();
        }

        System.out.println("Number of Instantiate Object {Before Calling GC}: "+Clasa .getNumberOfInstatiateObj());

        /* Here I am trying to deallocate the memory of Object at index no 9, so that GC   called this unused object to deallocate it from memory*/
        for(int i=0;i<object.length;i++){
            if(i==8){
                object[i]=object[i+1];
                object[i+1]=null;
                System.runFinalization();
                System.gc();
            }
        }   

        }
    }

只需将上面的代码放在 main 方法下面,您还必须从下面的代码中修改您的 Clasa 代码

包 com.instance.target;

类克拉萨{

    private static int nbInstances = 0;

    public Clasa () {
        nbInstances++;
    }

    public int getNo() {
        return nbInstances;
    }

  public void finalize(){
      nbInstances --;
      System.out.println("Number of Instantiate Object {After Calling GC}: "+nbInstances );
  }

}

按照上述步骤修改代码后,您的代码将为您提供所需的输出。

如果我在某些地方错了,请让我纠正。

嗨 Dany 我修改了我的代码,所以根据上面的代码,你必须在编写类代码的不同包下创建你的类。如果您仍然遇到问题,请告诉我。

于 2013-07-27T20:00:05.713 回答