簡體   English   中英

將類對象存儲到數組中

[英]Storing Objects of Class into an Array

我正在嘗試將具有“ 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;
    }
}

我不知道我的循環是錯誤的還是我聲明對象的方式是錯誤的? 任何幫助將是巨大的,在此先感謝!

您的字段變量不應為靜態。 它由Driver類的所有實例(即對象)共享,因此它將打印您添加的最后一個值。

問題一:

您的“實例變量”(用戶名和密碼)是靜態的。 因此,您只有一個實例。 如果將它們打印出來,則必須始終獲得相同的值。

問題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);
        }   
    }
}

static關鍵字強制將driverUserName和driverPassWord變量在內存中僅實例化一次 盡管它們不是常量,但它會向列表引用中的第一個(也是唯一一個)內存實例進行進一步的添加,因此為什么它始終顯示相同的值。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM