[英]Weird issue when declaring ArrayList as static in Java
public static void main(String[] args) {
NewClass Camry = new NewClass("Toyota", "Camry", "gray", "120,000");
NewClass Sonata = new NewClass("Hyundai", "Sonata", "red", "100,000");
NewClass Accent = new NewClass("Hyundai", "Accent", "blue", "60,000");
System.out.println(NewClass.PrintAll);
}
...
public class NewClass {
static ArrayList<String> cars = new ArrayList<>();
static ArrayList<String> carsInfo = new ArrayList<>();
static String PrintAll = "";
String make = "";
String model = "";
String color = "";
String price = "";
public NewClass(String make, String model, String color, String price) {
this.make = make;
this.model = model;
this.color = color;
this.price = price;
carsInfo.add("Make: " + this.make + " \t ");
carsInfo.add("Model: " + this.model + " \t ");
carsInfo.add("Color: " + this.color + " \t ");
carsInfo.add("price: " + this.price + " SAR\n");
cars.add((carsInfo.get(0) + carsInfo.get(1) + carsInfo.get(2) + carsInfo.get(3)));
PrintAll += cars.get(0);
}
}
只是為了讓您理解我的問題,這是我將兩個 ArrayLists 聲明為static時的輸出:
品牌:豐田 車型:凱美瑞 顏色:灰色 價格:120,000 沙特里亞爾
品牌:豐田 車型:凱美瑞 顏色:灰色 價格:120,000 沙特里亞爾
品牌:豐田 車型:凱美瑞 顏色:灰色 價格:120,000 沙特里亞爾
什么時候應該:
品牌:豐田 車型:凱美瑞 顏色:灰色 價格:120,000 沙特里亞爾
品牌:現代 型號:索納塔 顏色:紅色 價格:100,000 沙特里亞爾
品牌:現代 型號:口音 顏色:藍色 價格:60,000 沙特里亞爾
出於某種原因,第一個對象值與其他所有對象重復。
不使用靜態一切都很好,但我需要數組是靜態的,這樣我就可以從另一個類訪問它們。 所以我真的很想知道是什么原因造成的。
靜態字段通常也稱為“類的變量”。 即使類沒有被實例化,它們的值也總是可以被初始化。 這就是為什么當您創建此類的新實例時,您總是會在 ArrayLists 中填充那些第一個值 - 構造函數不斷推送到這些靜態變量,並且由於它們不屬於對象的任何實例,這些值只是不斷添加,這也是它在沒有 static 關鍵字的情況下工作的原因。
一般來說,靜態的使用大多不是一個好主意。 現在,我只能認為它對常量有用 - 如果我遺漏了什么,請評論下來。 我建議將這些 ArrayList 字段設為私有且非靜態(除了 PrintAll 字段)。 然后,您可以為那些非靜態字段創建公共訪問器,這樣其他類可以實例化 NewClass(),調用其上的訪問器,它們可以返回該字段的值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.