内存分配Java Enum

时间:2013-11-30 05:49:07

标签: java enums

这个问题是关于枚举内部对象的内存分配,    我有一个Enum类如下

 class TemplateEnum{

    F1(new Class1()), F2(new Class2()),F3(new Class3());
     /*
        Related code like constructors
     */
   }

我怀疑是何时为类class1,class2,class3创建对象(分配内存)。

由于

1 个答案:

答案 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()