Супер простая проблема с ArrayList в Java - PullRequest
1 голос
/ 09 июня 2011

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

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());
        } 
    }

}

Почему эта функция печатает меня:
edu
edu
edu

Вместо:
Пепе
Хосе
Edu

Спасибо заранее.

Ответы [ 5 ]

9 голосов
/ 09 июня 2011

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

Переменная static используется всеми экземплярами класса.

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

3 голосов
/ 09 июня 2011

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

2 голосов
/ 09 июня 2011

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

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

private String user;
private String password;
2 голосов
/ 09 июня 2011

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

private static String user;
private static String password;

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

0 голосов
/ 28 июля 2015

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...