Java 防止存储在ArrayList中的对象被过度写入

Java 防止存储在ArrayList中的对象被过度写入,java,Java,基本上,我必须编写一个简单的联系人管理器,并将对象存储在数组列表中 让我沮丧的是,我有一个newContact方法,调用该方法时会创建Contact的新实例,并将其存储在ArrayList中。问题是每次我调用该方法时,列表中的所有其他对象都会被覆盖 import java.util.ArrayList; public class ContactManager { public static ArrayList<Contact> contactList = new ArrayLi

基本上,我必须编写一个简单的联系人管理器,并将对象存储在数组列表中

让我沮丧的是,我有一个newContact方法,调用该方法时会创建Contact的新实例,并将其存储在ArrayList中。问题是每次我调用该方法时,列表中的所有其他对象都会被覆盖

import java.util.ArrayList;
public class ContactManager {

  public static ArrayList<Contact> contactList = new ArrayList<Contact>();
  public static Contact[]c = {};

  public static void main(String[]args){
    newContact();
    newContact();

    System.out.println(contactList.get(1).getName());
    System.out.println(contactList.get(0).getName());
  }

  public static void newContact(){
    Contact c = new Contact();
    contactList.add(c);
  }
}
公共类联系人{

private static String name, number;

//constructor will ask to enter contact details
public Contact(){
    Scanner in = new Scanner(System.in);

    System.out.println("Enter name:");
    name = in.next();

    System.out.println("Enter number:");
    number = in.next();
}

//getters and setters

public static String getName(){
    return name;
}

public static String getNumber(){
    return number;
}

public static void setName(String newName){
    name = newName;
}

public static void setNumber(String newNumber){
    number = newNumber;
}

}

这是因为
联系人
类中的成员是静态的。这意味着所有
联系人
实例共享相同的
名称
编号
。您应该使它们成为实例成员,以便每次创建
新联系人
时,您都可以获得这些变量的新副本。

它应该打印John Peterror与您的代码在一起。您能给我们看一下
Contact()的代码吗
?请向我们展示初始化属性的代码。联系人列表声明为
静态
这一事实可能会导致问题,我不看代码就无法确定。@ÓscarLópez我认为静态与此无关。在这种情况下不会产生问题@ÓscarLópez:我同意Edge-这不是问题最好的OO设计,但我认为这不是问题所在。
private static String name, number;

//constructor will ask to enter contact details
public Contact(){
    Scanner in = new Scanner(System.in);

    System.out.println("Enter name:");
    name = in.next();

    System.out.println("Enter number:");
    number = in.next();
}

//getters and setters

public static String getName(){
    return name;
}

public static String getNumber(){
    return number;
}

public static void setName(String newName){
    name = newName;
}

public static void setNumber(String newNumber){
    number = newNumber;
}

}