这个问题是关于枚举中标记的对象的内存分配,我有一个Enum类,如下
class TemplateEnum{
F1(new Class1()), F2(new Class2()),F3(new Class3());
/*
Related code like constructors
*/
}
我的疑问是什么时候为类class1,class2,class3
创建了对象(分配了内存)。
感谢
假设你指的是
enum TemplateEnum {
F1(new Class1()), F2(new Class2()),F3(new Class3());
/*
Related code like constructors
*/
}
JLS指出
除了枚举类型E从enum继承的成员之外,对于每个名称为n的已声明枚举常量,枚举类型具有隐式声明的类型为E的名为n的公共静态最终字段字段的声明顺序与对应的枚举常量,在任何静态字段之前显式显示在枚举类型中声明。每个这样的字段都初始化为枚举对应的常数。
因此F1
(和其他)成为
public static final TemplateEnum F1 = new TemplateEnum(new Class1());
由于静态字段是在加载类时初始化的,因此每个字段的构造函数调用中的new Class1()
将在那时执行。