内存分配Java枚举



这个问题是关于枚举中标记的对象的内存分配,我有一个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()将在那时执行。

最新更新