鉴于此课程
public class Worker
private String name;
private static int WorkerCount = 0; // number of workers
public Worker(<*parameter list* >)
{
<*initialization of private instances variables* >
Worker++; //increment count of all worker
}
}
如果我要添加方法......
public static int getWorkerCount()
{
return WorkerCount;}
我刚刚添加静态而不是实例的方法怎么样? 我认为它可以是一个实例方法,因为它在“WorkerCount”的单个对象上运行,该对象最初等于0.
答案 0 :(得分:2)
更多的问题是谁应该能够调用方法而不是它访问了多少个对象等。
static
字段和方法属于 Class ,而不是特定的实例。因此,无论您实例化Employee
多少次,都只会有一个int employeeCount
。每个员工对employeeCount
字段的引用都会返回到同一位置。通过使用employeeCount字段,您已经得到了这个,这只是将相同的逻辑应用于方法。
通过使getEmployeeCount()
静态,您说不仅任何员工可以调用它,Employee
类本身也可以调用该方法;你不需要一个实例来调用方法。
Employee.getEmployeeCount(); //Valid, because getEmployeeCount() is static
Employee.name; //Invalid (non-static reference from static context) because *which* employee's name?
因为它只访问静态字段,所以这是有意义的。无论你打算在什么实例上调用它,它都会返回相同的值。考虑一下代码:
Employee a = new Employee();
Employee b = new Employee();
System.out.println(a.getEmployeeCount()); //2
System.out.println(b.getEmployeeCount()); //2
System.out.println(Employee.getEmployeeCount()); //2
Employee c = new Employee();
System.out.println(a.getEmployeeCount()); //3
System.out.println(b.getEmployeeCount()); //3
System.out.println(c.getEmployeeCount()); //3
System.out.println(Employee.getEmployeeCount()); //3
没有什么可以阻止你使getEmployeeCount()
非静态。但是,因为根本调用方法的实例并不重要(实际上你甚至不需要实例),所以制作方法static
既方便又好。< / p>
答案 1 :(得分:0)
该方法应该是静态的,以允许在班级访问员工计数。
由于employeeCount
变量是静态的,因此已经为此功能设置了方法体。您可能希望这样,因为它会计算使用该构造函数初始化的Employee
个对象的总数。
另外值得注意的是employeeCount
是原始值(int),不应该被称为对象。