在Java中,何时调用枚举常量的构造函数?

时间:2009-09-04 19:00:16

标签: java enums constructor

要在Java中使用一个人为的例子,这里是代码:

enum Commands{
   Save("S");
   File("F");

   private String shortCut;
   private Commands(String shortCut){ this.shortCut = shortCut; }
   public String getShortCut(){ return shortCut; }
}

我有以下测试/驱动程序代码:

public static void main(String args[]){
   System.out.println(Commands.Save.getShortCut());
}

问题是: 在Java中,何时调用枚举常量的构造函数?在上面的例子中,我只使用Save枚举常量。这是否意味着只调用一次构造函数来创建Save?或者SaveFile是否可以一起构建?

3 个答案:

答案 0 :(得分:13)

初始化enum类时调用构造函数。无论实际引用和使用哪些成员,都将以成员声明顺序调用每个构造函数。

答案 1 :(得分:3)

static() {...}方法非常相似,首次初始化Enum类时会调用构造函数。 Enum的所有实例都是在使用任何实例之前创建的。

public static void main(String args[]){
   System.out.println(Commands.Save.getShortCut());
}

在此示例中,SaveFile的ctor将在调用Save.getShortCut()之前完成。

按顺序调用它们,如代码中所声明的那样。

答案 2 :(得分:2)

正如其他人所说,两者都将在类初始化时创建。我想指出这是在任何静态初始化程序之前完成的,因此您可以在静态块中使用这些枚举。