gpt4 book ai didi

java - 通过引用类避免访问静态字段?

转载 作者:行者123 更新时间:2023-11-30 06:52:54 25 4
gpt4 key购买 nike

我不明白为什么这是有效的,请帮助教育我。

Config CFIG = new Config();
Tile selectedTile = CFIG.tileGallery.get(1);
System.out.println("This is the name:" + selectedTile.getName());
Feature selectedFeature = CFIG.featureGallery.get(3);
System.out.println("This is the name:" + selectedFeature.getName()+
" " + selectedFeature.getEffect(0));

我初始化对象CFIG,它同时设置类Config tileGallery ArrayList 和featureGallery 的成员变量> 数组列表。当我运行代码时,它可以工作,输出选定的测试值。然而,对于这两个声明性语句,Netbeans 都给出了“访问静态字段”的警告

使用“用类引用替换”的提示,它将语句更改为:

Tile selectedTile = Config.tileGallery.get(1);
Feature selectedFeature = Config.featureGallery.get(3);

当我运行它时,它仍然有效!

问题,配置。不识别从哪个 Config 对象调用数据。现在我只有一个 Config 对象存在,但即使我初始化第二个 Config 对象它仍然不会显得困惑。

这是怎么回事?

编辑:andih 想知道配置类的代码是什么。我没有添加它,因为它不多,而且你可以很容易地假设它做了什么,因为它与这个问题有关。但是,以防万一。

public class Config {
public static ArrayList<Tile> tileGallery;
public static ArrayList<Feature> featureGallery;

public Config (){
this.tileGallery = Tile.ReadTileXML();
this.featureGallery = Feature.ReadFeatureXML();
}
}

最佳答案

static 关键字表示该字段属于类而不是类的实例。即使你创建了一百个对象,这个字段也会在它们之间共享。来自每个实例的这些静态字段“tileGallery”和“featureGallery”将指向内存中的同一个对象。

静态变量在类加载时只在类区获得一次内存。

关于java - 通过引用类避免访问静态字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38194853/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com