在java中定义静态with对象

在java中定义静态with对象,java,Java,一位采访者问我: class Employee{ private string empname; public String getEmpname() { return empname; } public void setEmpname(String empname) { this.empname = empname; } } class EmpDetails{ private static Employ

一位采访者问我:

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;

使用employee对象定义静态和非静态非访问修改器有什么好处?

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

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

> P>您应该考虑读取实例变量和类变量之间的差异,例如通过阅读关于主题的.< /P>可能的重复的是。正确的方式设计共享Mulpple PosiDebug实例使用同一个雇员实例。我不确定,但是它有助于内存利用吗?如果Employee有多个对象,那么它将占用多个内存位置。在这种情况下,它将占用单个内存位置。。。我是对的还是错的?当我用emp对象迭代列表时,我得到了suresh和prasad值,输出为Size=2 Size=suresh Size========Prasad@user1357722,是的,您将获得列表的两个值,但请尝试获取emp字段值,该值将仅返回Prasad,而不是suresh,它将适用于EmployeeDetails类的所有实例