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声明为静态时的输出:
制造:丰田车型:凯美瑞颜色:灰色价格:12万SAR
制造:丰田车型:凯美瑞颜色:灰色价格:12万SAR
制造:丰田车型:凯美瑞颜色:灰色价格:12万SAR
当它应该是:
制造:丰田车型:凯美瑞颜色:灰色价格:12万SAR
制作:现代车型:奏鸣曲颜色:红价:10万SAR
制造:现代车型:口音颜色:蓝色价格: 60,000 SAR
由于某些原因,第一个对象值将与每个其他对象一起重复。
如果不使用静态,一切都很好,但我需要数组是静态,以便可以从另一个类访问它们。所以我真的很想知道是什么导致了这一切。
发布于 2022-05-22 08:41:10
静态字段通常也称为“类的变量”。即使类没有实例化,它们的值也可以始终初始化。这就是为什么在创建该类的新实例时,总是会得到填充在ArrayLists中的第一个值的原因--构造函数一直推送到这些静态变量,而且由于它们不属于对象的任何实例,所以值只会不断地被添加,这也是为什么没有静态关键字的情况下它可以工作。
一般来说,静态的使用大多不是一个好主意。现在,我只能认为它对常量有用--如果我遗漏了什么,请注释一下。我建议这些ArrayList字段是私有的和非静态的(除了PrintAll字段)。然后,您可以为那些非静态的字段创建公共访问器,这样其他类就可以实例化NewClass(),调用访问器,并且它们可以返回字段的值。
https://stackoverflow.com/questions/72335909
复制相似问题