Супер простая проблема с ArrayList в Java

#java #arraylist

#java #список массивов #arraylist

Вопрос:

У меня есть два разных класса:

Cliente.java

 public class Cliente {
    private static String user;
    private static String password;
    public Cliente (String usr, String pass) {
        user = usr;
        password = pass;
    }
    public String getUser() {
        return user;
    }
}
  

И AddToArrayList.java, где я создаю клиентский тип ArrayList и и некоторые клиенты:

 public class AddToArrayList{
    static ArrayList<Cliente> listaClientes = new ArrayList<Cliente>();

    public static void main(String[] args) throws IOException {

        Cliente c1 = new Cliente("pepe","pepe1");
        Cliente c2 = new Cliente("jose","jose1");
        Cliente c3 = new Cliente("edu","edu1");       
        listaClientes.add(c1);
        listaClientes.add(c2);
        listaClientes.add(c3);

        printArraList();
    }

    public static void printArraList() throws IOException {     
        for (Cliente c : listaClientes) {
            System.out.println(c.getUser());
        } 
    }
  

}

Почему эта функция выводит меня:
эду
эду
эду

Вместо:
пепе
Хосе
эду

Заранее спасибо.

Комментарии:

1. 1 за упоминание «супер простой проблемы» в названии.

Ответ №1:

Потому что вы сделали переменную user в своем классе Cliente статической. Если вы удалите static ключевое слово, все должно работать так, как вы хотите.

static Переменная является общей для всех экземпляров класса.

На следующем сайте есть хорошая ссылка на ключевое слово static, я предлагаю вам прочитать его :).

Ответ №2:

Статические переменные — это переменные уровня класса. Чтобы иметь отдельные копии String user; и String password; для каждого экземпляра Cliente , сделайте их нестатическими.

Ответ №3:

Ниже приведены static , что означает, что они являются общими для всех экземпляров класса:

 private static String user;
private static String password;
  

Удалите static модификаторы, и каждый экземпляр получит свои собственные user и password .

Ответ №4:

Вы объявили поля в Cliente статическом формате. Таким образом, поля сохраняют последнее значение, которое вы установили: и это user edu .

Измените его на:

 private String user;
private String password;
  

Ответ №5:

Удалите статический модификатор, поскольку он используется, если необходимо, чтобы переменная была общей для всех объектов одного класса Java. Экземпляр не является обязательным для изменения статической переменной, которая не требуется в случае пользователя и пароля в вашем случае.