是否在创建类的新实例时复制的类中是静态变量?

 奄奄的栀子花 发布于 2023-02-13 15:15

在这里.假设我有这门课

public class EpicClass{
    public static ArrayList arylst = new ArrayList<>();

    public String field1;
    public String field2:
}

现在,如果我执行此代码:

/* ... Code which adds stuff to arylst ... */
EpicClass foo = new EpicClass();
EpicClass bar = new EpicClass();

ArrayList中的东西是否会重复foo并且bar

1 个回答
  • 在初始化类时,静态变量被分配一次.从Java语言规范,§8.3.1.1 static字段:

    如果一个字段被声明为static,那么无论该类最终可以创建多少个实例(可能为零),都只存在该字段的一个化身.初始化类时,静态字段(有时称为类变量)会显示(第12.4节).

    请注意,这指的是字段本身,而不是字段可能包含的任何值.除非声明了字段final,否则可以一个接一个地为其赋值.特别是,每次创建实例时,您都可以[误]使用构造函数为字段赋值.通常,应避免在构造函数中指定静态字段.(有一些例外,例如使用静态字段来计算实例对象创建.)

    您可以使用类名或使用对实例的引用来访问静态字段.1因此,以下都是等效的(提供的foobar类型EpicClass):

    EpicClass.arylst
    foo.arylst
    bar.arylst
    

    (通过实例引用访问静态字段被认为是错误的并且通常会生成编译器警告,但它完全正常 - 即使引用是null,因为编译器将其转换为第一种形式.)仅在这个意义上," "ArrayList中的内容"似乎在类的每个实例中都是重复的.但是,只有一个实例,ArrayList您只是通过(看似)不同的机制访问它.

    当然,1 提供了可访问的字段.

    2023-02-13 15:17 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有