Java类中的静态变量

4

我希望问一下,在类中的静态变量是否会增加已初始化类的额外内存。

假设我有一个如下所示的类:

public class Sample{

    public static String NAME[] = {"1", "2", "3", "4"};

    private int id;

    private String uuid;
    private String name;

    public void setUuidString() {
        UUID uuid = UUID.randomUUID();
        this.uuid = uuid.toString();
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setCustomUuid(String uuid) {
        this.uuid = uuid;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getId() {
        return id;
    }

    public String getUuid() {
        return uuid;
    }

    public String getName() {
        return name;
    }
}

当我多次初始化并将其添加到Sample类数组中时,静态变量会给该类增加额外的内存空间吗?还是它只会在静态时占用一个内存位置?


1
@Abdelhak 我不太同意,这更多涉及内存管理问题。 - Ryan
我创建了一个样例类 - 发布一个示例。 - Roman C
1个回答

6

由于static变量在程序执行开始时进行初始化,因此为该变量留出了内存空间。由于变量是static的,它属于它的类而不是类的实例。因此,对于您创建的每个实例,它不会使用额外的内存。

使用static变量时,变量的单个实例在类的所有实例中共享,尽管您不需要类的实例来访问变量。


此外,还可以参考Java语言规范8.3.1.1静态字段:“如果一个字段被声明为静态的,那么无论最终创建多少个类的实例(可能为零),该字段都只存在一个实例。静态字段有时也称为类变量,在类初始化(§12.4)时被实例化。” - Andy Thomas
1
static 变量实际上是在类第一次加载时初始化的,而不是程序启动时。例如,按需初始化模式 利用这个事实来确保单例的延迟、线程安全加载。 - Dioxin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接