计算Java创建的对象数

时间:2018-09-12 19:07:30

标签: java object counter

我试图计算创建的对象数,但它始终返回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麻木。

6 个答案:

答案 0 :(得分:2)

您需要将numb设为静态,以使该类的每个实例只有一个副本。实际上,每个Employee对象都有其自己的numb副本。

为什么不将其放在构造函数中呢?

public Employee() {
   numb++;
}

答案 1 :(得分:1)

numb是一个实例变量,这意味着每个Employee对象将具有自己的numb,将由0初始化。

如果您希望所有Employee实例共享相同的numb,则应将其设置为static

答案 2 :(得分:1)

// Java program Find Out the Number of Objects Created 
// of a Class 
class Test { 

    static int noOfObjects = 0; 
        // Instead of performing increment in the constructor instance block is preferred 
       //make this program generic. Because if you add the increment in the constructor   
      //it won't work for parameterized constructors
    { 
        noOfObjects += 1; 
    } 

    // various types of constructors 
    public Test() 
    { 
    } 
    public Test(int n) 
    { 
    } 
    public Test(String s) 
    { 
    } 

    public static void main(String args[]) 
    { 
        Test t1 = new Test(); 
        Test t2 = new Test(5); 
        Test t3 = new Test("Rahul"); 


        System.out.println(Test.noOfObjects); 
    } 
} 

答案 3 :(得分:0)

  

我试图在我的员工班级中试一试,但始终如此   返回1

它返回1,因为numb是一个实例变量,这意味着您为Employee类创建的每个实例/对象都拥有自己的numb变量副本,该副本最初等于{{1 }}。在新创建的zero类实例上调用counter方法时,Employee变量将递增到numb并返回。

每次创建1类的实例时,都会发生相同的过程。

  

我想在对象为   制成

制作Employee静态变量将解决此问题,因为然后numb将是一个类变量,并且在该类的每个实例之间共享类变量。

签出Difference between instance and class variables

答案 4 :(得分:0)

进行此修改

  1. 使numbnumb一样
  2. 从方法public int numb=0;
  3. 中删除numb++;
  4. 创建构造函数count()

答案 5 :(得分:0)

由于static成员仅初始化一次,因此对于每个类的实例都是相同的。

class YourClass {

    private static int numb;

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

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

那么简单;-