-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

如果一个字段被定义为静态,则该字段的值由该特定类的所有实例共享。但是,在您的情况下,该字段被定义为私有,这限制了类的实例在类外访问它。当您调用填充 dataget() 时,它将创建 Employee 列表,静态 emp 字段将保存最后一个 emp("Prasad") 的值。如果创建了 EmpDetails 类的任何其他实例,并且您尝试使用其他方法(例如 GetEmp())在不调用 fillData 的情况下访问 emp,那么它将返回设置为“Prasad”的 emp 的最后一个值。
就设计而言,这种方法是不正确的,因为 EmpDetails 类由于静态 Employee 对象而指向一个 Employee。

于 2012-04-26T04:32:05.230 回答
0

如果Employee在类中定义一个静态成员字段EmpDetails——这意味着所有EmpDetails实例共享同一个Employee实例。如果没有更多的上下文,你的问题的其余部分并没有多大意义。

于 2012-04-26T04:22:27.520 回答
0

您应该考虑阅读实例变量类变量之间的区别,例如阅读有关该主题的Oracle 教程。

于 2012-04-26T04:51:33.443 回答