繁体   English   中英

具有相同数据Java的不同对象

[英]Different objects with the same data java

我创建了一个创建对象实例的类

public class EmployeeProfile {
    /////////INSTANCE VARIABLES/////////
    private static String fName;
    private static String lName;
    private static String email;
    private static String phone;


    ////////CONSTRUCTORS////////////
    public EmployeeProfile()
    {

    }

    public EmployeeProfile(String firstName, String lastName, String emailAdd, String pNumber)
    {
        fName = firstName;
        lName = lastName;
        email = emailAdd;
        phone = pNumber;
    } 
}

当我调用空的构造函数并使用我创建的方法自己填充它时,一切都很好。 但是,当我使用第二个构造函数和参数以新名称调用新对象时,它们会覆盖第一个对象中的数据!

    EmployeeProfile prof1 = new EmployeeProfile();
    prof1.firstName("John");
    prof1.lastName("Doe");
    prof1.email("johndoe@yahoo.com");
    prof1.phone("555-555-5555");


    EmployeeProfile prof2 = new EmployeeProfile("Jane", "Doe", "janedoe@yahoo.com", "555-123-4567");

    System.out.println(prof1.getProfile());
    System.out.println(prof2.getProfile());

当我运行此prof1和prof2时,都从prof2返回数据。 我在这里做错了什么?

/////////INSTANCE VARIABLES/////////
private static String fName;
private static String lName;
private static String email;
private static String phone;

注释和代码不一致。 static表示类变量,而不是实例。 因此,它们在类实例之间共享。

您创建静态变量。

private static String fName;
private static String lName;
private static String email;
private static String phone;

当您创建一些静态变量时,该值每次都会覆盖。 因此,请将其更改为没有static关键字。

e.g :private String fName;

static表示变量在整个类中都是静态的。 删除static变量,以便变量如下所示:

private String fName;
private String lName;
private String email;
private String phone;

祝好运。

问题在于静态属性在该类的实例之间共享,这就是为什么该属性被不断覆盖的原因。 因此,您应该删除属性中的静态描述符。 此外,在面向对象编程范例中,始终建议通过其getter和setter访问对象的属性。 进行更改后,代码将如下所示:

public class EmployeeProfile {
    /////////INSTANCE VARIABLES/////////
    private String fName;
    private String lName;
    private String email;
    private String phone;


    ////////CONSTRUCTORS////////////
    public EmployeeProfile()
    {

    }

    public EmployeeProfile(String firstName, String lastName, String emailAdd, String pNumber)
    {
        this.setfName(firstName);
        this.setlName(lastName);
        this.setEmail(emailAdd);
        this.setPhone(pNumber);
    }

    public String getfName() {
        return fName;
    }

    public void setfName(String fName) {
        this.fName = fName;
    }

    public String getlName() {
        return lName;
    }

    public void setlName(String lName) {
        this.lName = lName;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    } 

}

希望能帮助到你。

克莱门西奥·莫拉莱斯·卢卡斯。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM