посчитать количество объектов, созданных Java - PullRequest
0 голосов
/ 12 сентября 2018

Я пытаюсь подсчитать количество созданных объектов, но всегда возвращает 1.

public class Drivertwo {

    public static void main(String[] args) {
        Employee newEmp = new Employee();
        Employee newEmp2 = new Employee();
        Calculate newcal = new Calculate();
        Clerk newclerk = new Clerk();

        float x;
        int y;

        newEmp.setEmp_no(2300);
        newEmp.setEmp_name("W.Shane");
        newEmp.setSalary(30000);
        newEmp.counter();

        newEmp2.setEmp_no(1300);
        newEmp2.setEmp_name("W.Shane");
        newEmp2.setSalary(50000);
        newEmp2.counter();

        newclerk.setEmp_name("Crishane");
        newclerk.setEmp_no(1301);
        newclerk.setGrade(2);
        newclerk.setSalary(45000);
        newclerk.counter();

        System.out.println("Salary is:" + newcal.cal_salary(newclerk.getSalary(), newclerk.getEmp_no()));
        System.out.println("Name is:" + newclerk.getEmp_name());
        System.out.println("Employee number is:" + newclerk.getEmp_no());
        System.out.println("Employee Grade is:" + newclerk.getGrade());
        System.out.println("No of objects:" + newEmp.numb);

Это мой класс с основным методом

public class Employee {
    private int salary;
    private int emp_no;
    private String emp_name;
    public int numb=0;

    public int getSalary() {
        return salary;
    }

    public int getEmp_no() {
        return emp_no;
    }

    public String getEmp_name() {
        return emp_name;
    }

    public void setSalary(int newSalary) {
        salary = newSalary;
    }

    public void setEmp_no(int newEmp_no) {
        emp_no = newEmp_no;
    }

    public void setEmp_name(String newEmp_name) {
        emp_name = newEmp_name;
    }


    }

    public int counter() {
        numb++;
        return numb;

Это мой сотрудник класса

Я пытался запустить счетчик в своем классе сотрудников как стартер, но он всегда возвращает 1. Я знаю, что могу создать счетчик в основном классе, и каждый раз, когда я создаю новый объект, я могу получить счетчик, но я хочу автоматически увеличить онемение на 1, когда объект сделан.

Ответы [ 5 ]

0 голосов
/ 12 сентября 2018

Поскольку static члены инициализируются только один раз, и он будет одинаковым для каждого экземпляра класса.

class YourClass {

    private static int numb;

    public YourClass() {
        //...
        numb++;
    }

    public static int counter() {
        return numb;
    }
}

Так просто; -

0 голосов
/ 12 сентября 2018

внести изменения

  1. make numb static like, public int numb=0;,
  2. удалить numb++; из метода count() и
  3. создать конструктор public Employee{numb++;}
0 голосов
/ 12 сентября 2018

Вам нужно сделать numb статическим, чтобы в каждом экземпляре класса была только одна копия.Как таковой, каждый отдельный объект Employee имеет свою собственную копию numb.

Кроме того, вместо создания метода для увеличения счетчика, почему бы просто не поместить его в конструктор:

public Employee() {
   numb++;
}
0 голосов
/ 12 сентября 2018

Я пытался запустить счетчик в своем классе сотрудников как стартер, но он всегда возвращает 1

Возвращает 1, потому что numb является переменной экземпляра, что означает, что каждый экземпляр / объектто, что вы делаете из класса Employee, имеет собственную копию переменной numb, изначально равную zero.Когда вы вызываете метод counter для только что созданного экземпляра класса Employee, переменная numb увеличивается до 1 и возвращается.

Тот же процесс происходит каждый раз, когда вы создаете экземпляр Employee класс.

я хочу автоматически увеличить онемение на 1 при создании объекта

Создание статической переменной numb решит эту проблему, потому что тогда numb будет переменной класса, и переменные класса будут общими для каждого экземпляра этого класса.

Проверьте разницу между переменными экземпляра и класса

0 голосов
/ 12 сентября 2018

numb - это переменная экземпляра, означающая, что у каждого Employee объекта будет свой собственный numb, который будет инициализирован 0.

Если вы хотите, чтобы все экземпляры Employee имели один и тот же numb, вы должны сделать это static.

...