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

时间:2015-01-14 19:37:35

标签: 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;
    }

}

2 个答案:

答案 0 :(得分:5)

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

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

这来自relevant section in the Java Language Specification

  

枚举常量后面可以跟参数,当在类初始化期间创建常量时,这些参数将传递给枚举类型的构造函数,如本节后面所述。使用正常的重载规则(第15.12.2节)选择要调用的构造函数。如果省略参数,则假定为空参数列表。

答案 1 :(得分:0)

出于所有实际目的,java将enum视为一个只能有固定数量的Object(一个对应于每个枚举常量定义的对象)的类。所以enum在加载,初始化等方面几乎就像一个类。