Java枚举,如何以及何时为每个常量分配内存

标签 java enums

我有如下所示的简单枚举类。我想知道内存是如何分配给每个常量的(是否为每个常量创建了成员类对象)以及它的范围是什么。

public enum Member {
    HAPPY("HAPPY"),RAhul("RAhul"),ANSAL("ANSAL");
    private String argument;

    Member(String arguments)
    {
        System.out.println("Enum Constructor work");
        this.argument = arguments;

    }
    public String getValue() {
        return argument;
    }

}

最佳答案

成员 HAPPY("HAPPY"),RAhul("RAhul"),ANSAL("ANSAL"); 是在加载枚举类时创建的(即它们的作用域是静态的)。枚举被编译为扩展 java.lang.Enum 的普通类,并且它的实例像其他类对象一样在堆中分配。

每个成员调用枚举中定义的构造函数,该构造函数接受字符串参数。

这是来自 relevant section in the Java Language Specification :

An enum constant may be followed by arguments, which are passed to the constructor of the enum type when the constant is created during class initialization as described later in this section. The constructor to be invoked is chosen using the normal overloading rules (§15.12.2). If the arguments are omitted, an empty argument list is assumed.

关于Java枚举,如何以及何时为每个常量分配内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27951014/

相关文章:

java - TreeBasedTable 的 Guava TreeRow 没有排序,尽管它实现了 SortedMap?

Java:对枚举数组的最终引用是不可变的吗?

Java - 应该是基本的东西是每行都给出错误

java - 比较时出现问题,使点在单击时改变颜色

java - 使用 Spring IoC 设置枚举值

java - 切换枚举值 : case expressions must be constant expressions

java - Vaadin 字段组将 Enum 与 TextField 等绑定(bind)

java - 为什么枚举要实现接口(interface)?

java - 利息数量

java - 将 HTML 写入 txt 文件时出现编码错误