我有简单的枚举类,如下所示。我想知道如何为每个常量分配内存(为每个常量创建成员类对象)以及它的范围是什么。
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;
}
}
答案 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在加载,初始化等方面几乎就像一个类。