将类的对象存储到数组中

时间:2016-02-11 16:05:54

标签: java arrays class object

我正在尝试将具有用户名和密码的对象从“Driver”类存储到数组列表中。当我尝试打印数组中的每个值来测试它们是否被存储时,它只会打印多次声明的最后一个值。我已经在论坛上尝试了与此问题相关的几乎所有其他解决方案,它只是不起作用:(

以下代码:

package eDepotSystem;

import java.util.ArrayList;


public class Driver {

    protected static String driverUserName;
    protected static String driverPassWord;

    public Driver (String userName, String passWord) {
        driverUserName = userName;
        driverPassWord = passWord;

    }

    public static void driverArray() {

        ArrayList<Driver> driverList = new ArrayList<Driver>();

        Driver driver = new Driver(driverUserName, driverPassWord);
        driver.setUserName("driver1");
        driver.setPassword("123");
        driverList.add(driver);

        driver = new Driver(driverUserName, driverPassWord);
        driver.setUserName("driver2");
        driver.setPassword("321");
        driverList.add(driver);

        Driver tempDriver = new Driver(driverUserName, driverPassWord);
        for (int i = 0; i < driverList.size(); i++) {
            tempDriver = driverList.get(i);
            System.out.println(tempDriver);
        }   
    }

    public void setPassword(String password) {
        driverPassWord = password;
    }

    public static String getUserName() {
        return driverUserName;
    }

    @Override
    public String toString() {
        return driverUserName + driverPassWord;
    }
}

我不知道我的循环是错误的还是我声明对象的方式错了?任何帮助都是盛大的,并提前感谢!

3 个答案:

答案 0 :(得分:3)

你的字段变量不应该是静态的。 它由Driver类(即对象)的所有实例共享,因此它将打印您添加的最后一个值。

答案 1 :(得分:3)

问题1:

您的&#34;实例变量&#34; (用户名和密码)是静态的。因此,您只有一个实例。如果你打印出来,你必须总是得到相同的值。

问题2:

您只需添加一个对象。您添加一次,更改它的值并再次添加它。如果您将其打印出来,则必须获得相同的值...即使您删除了static个关键字。

你应该尝试这样的事情:

package eDepotSystem;

import java.util.ArrayList;
import java.util.List;

public class Driver {
    private final String driverUserName;
    private final String driverPassWord;

    public Driver (String userName, String passWord) {
        driverUserName = userName;
        driverPassWord = passWord;
    }

    public static void driverArray() {
        List<Driver> driverList = new ArrayList<Driver>();
        driverList.add(new Driver("drv1", "pw1"));
        driverList.add(new Driver("drv2", "pw2"));

        for (Driver tempDriver : driverList) {
            System.out.println(tempDriver);
        }   
    }
}

答案 2 :(得分:0)

static 关键字强制driverUserName和driverPassWord变量仅在内存中实例化一次。虽然它们不是常量,但它会使列表引用的任何进一步添加成为内存中的第一个且唯一的实例,因此它保持显示相同值的原因。

https://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html