Это от эффективной Java:
// Implementing a fromString method on an enum type
  private static final Map<String, Operation> stringToEnum
      = new HashMap<String, Operation>();
  static { // Initialize map from constant name to enum constant
    for (Operation op : values())
      stringToEnum.put(op.toString(), op);
  }
  // Returns Operation for string, or null if string is invalid
  public static Operation fromString(String symbol) {
    return stringToEnum.get(symbol);
  }
Обратите внимание, что константы операции помещаются на карту stringToEnum из статического блока, который запускается после создания констант. Пытаясь заставить каждую константу вставлять себя в карту из своих собственных конструктор вызовет ошибку компиляции. Это хорошая вещь, потому что это вызовет исключение NullPointerException, если оно будет законным. Enum конструкторам arent разрешен доступ к статическим полям enums, кроме полей постоянной времени компиляции. Это ограничение необходимо поскольку эти статические поля еще не были инициализированы, когда выполняются конструкторы.
Мой вопрос касается линии:
"Обратите внимание, что константы операции помещаются в карту stringToEnum из статического блока, который запускается после создания констант".
Я думал, что статический блок запускается до запуска конструктора. Фактически они выполняются во время загрузки класса.
Что мне здесь не хватает?
