-1

インタビュアーは私にこう尋ねました:

class Employee{
    private string empname;

    public String getEmpname() {
        return empname;
    }
    public void setEmpname(String empname) {
        this.empname = empname;
    }
}

class EmpDetails{    
    private static Employee emp;
    public static List fillData(){
        emp=new Employee();
        List l=new ArrayList();
        System.out.println("static after new creation fillData"+System.identityHashCode(emp));
        emp.setEmpname("suresh");
        emp.setDesignation("Sr.Software Engineer");
        l.add(emp);
        emp=new Employee();
        System.identityHashCode(emp);
        System.out.println("static after new creation fillData"+System.identityHashCode(emp));
        emp.setEmpname("Prasad");
        emp.setDesignation("Software Engineer");
        l.add(emp);
        return l;    
    }
}

以下に定義するとどうなりますか

private static Employee emp;

従業員オブジェクトで静的および非静的の非アクセス修飾子を定義する利点は何ですか?

4

3 に答える 3

2

フィールドが静的に定義されている場合、そのフィールドの値は、その特定のクラスのすべてのインスタンスによって共有されます。ただし、あなたの場合、そのフィールドはプライベートとして定義されており、クラスのインスタンスがクラスの外部にアクセスすることを制限しています。fill dataget() が呼び出されると、従業員のリストが作成され、静的 emp フィールドには最後の emp("Prasad") の値が保持されます。EmpDetails クラスの他のインスタンスが作成され、fillData を呼び出さずに GetEmp() などの他のメソッドを使用して emp にアクセスしようとすると、「Prasad」に設定された emp の最後の値が返されます。
設計に関しては、EmpDetails クラスは静的な Employee オブジェクトのために 1 つの Employee を指すため、このアプローチは正しくありません。

于 2012-04-26T04:32:05.230 に答える
0

クラスで静的Employeeメンバー フィールドを定義すると、これはすべてのインスタンスが同じインスタンスを共有することを意味します。あなたの質問の残りの部分は、文脈がなければあまり意味がありません。EmpDetailsEmpDetailsEmployee

于 2012-04-26T04:22:27.520 に答える
0

たとえば、トピックに関するOracle のチュートリアルを読むなどして、インスタンス変数クラス変数の違いについて読むことを検討する必要があります。

于 2012-04-26T04:51:33.443 に答える