首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Java中将ArrayList声明为静态时出现的奇怪问题

在Java中将ArrayList声明为静态时出现的奇怪问题
EN

Stack Overflow用户
提问于 2022-05-22 08:25:08
回答 1查看 62关注 0票数 -2
代码语言:javascript
复制
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);   

}

..。

代码语言:javascript
复制
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

由于某些原因,第一个对象值将与每个其他对象一起重复。

如果不使用静态,一切都很好,但我需要数组是静态,以便可以从另一个类访问它们。所以我真的很想知道是什么导致了这一切。

EN

回答 1

Stack Overflow用户

发布于 2022-05-22 08:41:10

静态字段通常也称为“类的变量”。即使类没有实例化,它们的值也可以始终初始化。这就是为什么在创建该类的新实例时,总是会得到填充在ArrayLists中的第一个值的原因--构造函数一直推送到这些静态变量,而且由于它们不属于对象的任何实例,所以值只会不断地被添加,这也是为什么没有静态关键字的情况下它可以工作。

一般来说,静态的使用大多不是一个好主意。现在,我只能认为它对常量有用--如果我遗漏了什么,请注释一下。我建议这些ArrayList字段是私有的和非静态的(除了PrintAll字段)。然后,您可以为那些非静态的字段创建公共访问器,这样其他类就可以实例化NewClass(),调用访问器,并且它们可以返回字段的值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72335909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档