Java 将类的对象存储到数组中

Java 将类的对象存储到数组中,java,arrays,class,object,Java,Arrays,Class,Object,我试图将具有类“Driver”中用户名和密码的对象存储到数组列表中。当我试图打印数组中的每个值以测试它们是否被存储时,它只会多次打印最后声明的值。我在电子论坛上尝试了几乎所有其他与此相关的解决方案,但都不起作用:( 代码如下: package eDepotSystem; import java.util.ArrayList; public class Driver { protected static String driverUserName; protected st

我试图将具有类“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;
    }
}
package系统;
导入java.util.ArrayList;
公务舱司机{
受保护的静态字符串驱动器名称;
受保护的静态字符串驱动器密码;
公共驱动程序(字符串用户名、字符串密码){
driverUserName=用户名;
driverPassWord=密码;
}
publicstaticvoiddriverarray(){
ArrayList driverList=新的ArrayList();
驱动程序驱动程序=新驱动程序(驱动程序名称、驱动程序密码);
driver.setUserName(“driver1”);
驱动程序设置密码(“123”);
添加(驱动程序);
driver=新驱动程序(driverUserName、driverPassWord);
driver.setUserName(“driver2”);
驱动程序设置密码(“321”);
添加(驱动程序);
Driver tempDriver=新驱动程序(driverUserName、driverPassWord);
对于(int i=0;i

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

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

static关键字强制driverUserName和driverPassWord变量在内存中仅实例化一次。虽然它们不是常量,但它会进一步添加到您的列表中,引用内存中的第一个也是唯一的实例,因此它会不断显示sa我的价值

问题1:

您的“实例变量”(用户名和密码)是静态的。因此,您只有一个实例。如果您将它们打印出来,您必须始终获得相同的值

问题2:

只添加一个对象。添加一次,更改它的值,然后再添加一次。如果打印出来,则必须获得相同的值…即使删除
静态
关键字

您应该尝试以下方法:

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);
        }   
    }
}
package系统;
导入java.util.ArrayList;
导入java.util.List;
公务舱司机{
专用最终字符串驱动器名称;
私有最终字符串驱动程序Password;
公共驱动程序(字符串用户名、字符串密码){
driverUserName=用户名;
driverPassWord=密码;
}
publicstaticvoiddriverarray(){
List driverList=new ArrayList();
添加(新驱动程序(“drv1”、“pw1”);
添加(新驱动程序(“drv2”、“pw2”));
用于(驱动程序临时驱动程序:驱动程序列表){
System.out.println(tempDriver);
}   
}
}

driverUserName
driverPassWord
对于for循环不应该是静态的+1。正如《有效的Java》第二版第46项:相对于传统的for循环,更喜欢for each循环,
在1.5版中引入的for each循环通过隐藏迭代器或索引变量来消除混乱和出错的机会完全能够
非常感谢这帮了大忙,我不觉得自己很傻吗!现在我已经将它们从静态更改为静态,在我的主字符串驱动程序中。driverArray()将不再work@DCWD您不能从静态上下文引用非静态变量。我不会在静态方法
driverArray()中使用您的变量
。您也不应该使用它们。