静态方法与实例方法应用于示例

时间:2015-01-02 04:57:01

标签: java static-methods instance-methods

鉴于此课程

  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.

2 个答案:

答案 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),不应该被称为对象。