【问题标题】:Different objects with the same data java具有相同数据的不同对象java
【发布时间】:2014-10-12 02:56:19
【问题描述】:

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

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 返回数据。我在这里做错了什么?

【问题讨论】:

  • 你认为static是什么意思?
  • 天啊!大声笑我想我应该提到我对java也很陌生。谢谢!

标签: java oop object


【解决方案1】:
/////////INSTANCE VARIABLES/////////
private static String fName;
private static String lName;
private static String email;
private static String phone;

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

【讨论】:

    【解决方案2】:

    你制作静态变量。

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

    当您创建一些静态变量时,该值每次都会覆盖。 所以,请将其更改为,不带静态关键字。

    e.g :private String fName;
    

    【讨论】:

    • 谢谢,我的印象是静态意味着它不会每次都覆盖。问题解决了
    • 静态意味着一个类的每个实例都将共享同一个属性/变量实例
    【解决方案3】:

    static 表示该变量在整个类中都是静态的。删除static,让你的变量看起来像这样:

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

    祝你好运。

    【讨论】:

      【解决方案4】:

      问题在于静态属性在该类的实例之间共享,这就是属性不断被覆盖的原因。因此,您应该删除属性中的静态描述符。此外,在面向对象的编程范式中,始终建议通过它的 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;
          } 
      
      }
      

      希望对你有帮助。

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

      【讨论】:

        猜你喜欢
        • 2012-09-22
        • 1970-01-01
        • 1970-01-01
        • 2013-05-12
        • 1970-01-01
        • 2015-09-09
        • 2018-05-22
        • 2017-11-09
        • 1970-01-01
        相关资源
        最近更新 更多