跟踪实例化对象数量的Java类变量



我有一个类,Student,带有变量StudentID:

public class Student extends Person{
  int studentID = 0;
  int level;
  public Student(){
  }
  public Student(String fName, String lName, int gLevel){
    super(fName, lName);
    if(gLevel >= 0 && gLevel <= 12){
      level = gLevel;
    }
    studentID++;
  }
  public int getLevel(){
    return level;
  }
  public String toString(){
    String toReturn;
    toReturn = super.toString() + "n   Grade Level: " + level + "n   ID #: " + studentID;
    return toReturn;
  }
}

我希望变量StudentID保持不变,为每个学生创建一个新的ID号。每个ID号都应该比上次创建的ID号多一个,因此等于已创建的对象总数。现在,每个对象都被指定了ID号1。

添加一个静态counter并用它初始化studentID,在过程中递增:

public class Student extends Person{
  static counter = 1;
  int studentID = counter++;
  ...

使studentID成为静态成员

无论类的实例有多少,静态成员都会保留在类的每个实例中。

   public class Student extends Person{
      static int studentID = 0;
      int level;
      public Student(){
      }
      public Student(String fName, String lName, int gLevel){
        super(fName, lName);
        if(gLevel >= 0 && gLevel <= 12){
          level = gLevel;
        }
        studentID++;
      }
      public int getLevel(){
        return level;
      }
      public String toString(){
        String toReturn;
        toReturn = super.toString() + "n   Grade Level: " + level + "n   ID #: " + studentID;
        return toReturn;
      }
    }

您需要一个静态变量来跟踪创建的学生对象的数量。

public class Student extends Person{
    /* Number of students objects created */
    private static int studentCount = 0;   
    int studentID = 0;
    int level;
    public Student(String fName, String lName, int gLevel){
        super(fName, lName);
        if(gLevel >= 0 && gLevel <= 12){
            level = gLevel;
        }
        studentID = Student.getNextStudentId();
    }
    private static synchronized int getNextStudentId() {
        /* Increment the student count and return the value */
        return ++studentCount;
    }
}

最新更新