0

このクラスを考えると

  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;}

インスタンスの代わりに静的に追加したメソッドはどうですか? 元々0である「WorkerCount」の個別オブジェクトに対して動作するので、インスタンスメソッドになり得ると思います。

4

2 に答える 2

2

メソッドがアクセスするオブジェクトの数などではなく、誰がメソッドを呼び出せるかという問題です。

staticフィールドとメソッドは、特定のインスタンスではなくクラスに属します。したがって、何回インスタンス化しても、1 つだけ存在します。フィールドへの各従業員の参照は、同じ場所に戻ります。employeeCount フィールドを使用することで、既にこれを取得できます。同じロジックをメソッドに適用するだけです。Employeeint employeeCountemployeeCount

静的にすることで、すべての従業員がそれを呼び出すことができるだけでなく、クラス自体がメソッドを呼び出すこと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です。

于 2015-01-02T05:03:12.597 に答える
0

クラスレベルで従業員数にアクセスできるようにするには、メソッドを静的にする必要があります。

employeeCount変数は静的であるため、メソッド本体はこの機能用に既にセットアップされています。Employeeそのコンストラクターで初期化されたオブジェクトの総数をカウントし続けるため、この方法が必要になる可能性があります。

また、これemployeeCountはプリミティブ値 (int) であり、オブジェクトとして参照されるべきではないことにも注意してください。

于 2015-01-02T05:01:16.537 に答える