![](/img/trans.png)
[英]Java: ConcurrentModificationException, 3 threads, different lists, same objects
[英]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.