这个问题是关于枚举内部对象的内存分配, 我有一个Enum类如下
class TemplateEnum{
F1(new Class1()), F2(new Class2()),F3(new Class3());
/*
Related code like constructors
*/
}
我怀疑是何时为类class1,class2,class3
创建对象(分配内存)。
由于
答案 0 :(得分:3)
假设你的意思
enum TemplateEnum {
F1(new Class1()), F2(new Class2()),F3(new Class3());
/*
Related code like constructors
*/
}
JLS表示
除了Enum类型E继承自Enum的成员之外, 对于名称为n的每个声明的枚举常量,枚举类型具有 隐式声明了名为n的类型为E的公共静态最终字段 字段被认为是以与。相同的顺序声明 相应的枚举常量,在任何静态字段之前显式 在枚举类型中声明。每个这样的字段都初始化为枚举 与之对应的常数。
因此F1
(和其他人)成为
public static final TemplateEnum F1 = new TemplateEnum(new Class1());
And since static fields are initialized when the class is loaded,然后将执行每个字段的构造函数调用中的new Class1()
。