[英]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.