В Java, когда используется конструктор для нумерованной константы?

Чтобы использовать надуманный пример в 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 только? Или оба Save и File будут построены вместе независимо?

Ответ 1

Конструкторы вызываются при инициализации класса enum. Каждый конструктор будет вызываться в порядке объявления членства, независимо от того, какие элементы на самом деле ссылаются и используются.

Ответ 2

Как и метод static() {...}, конструкторы вызываются при первом инициализации класса Enum. Все экземпляры Enum создаются до того, как их можно будет использовать.

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

В этом примере ctor для Save и File будет завершен до вызова Save.getShortCut().

Они вызываются последовательно, как указано в коде.

Ответ 3

Оба будут созданы во время инициализации класса, как говорили другие. Я хотел бы отметить, что это делается перед любыми статическими инициализаторами, поэтому вы можете использовать эти перечисления в статическом блоке.