Kolejność wykonywania bloków statycznych w typie Enum w.r.t do konstruktora

To z Effective 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);
  }

Zauważ, że stałe operacji są umieszczane na mapie stringToEnum z bloku statycznego, który działa po utworzeniu stałych. Próba umieszczenia każdej stałej w mapie z własnego konstruktora spowodowałaby błąd kompilacji. To dobra rzecz, ponieważ spowodowałoby wyjątek NullPointerException, gdyby był legalny. Enum konstruktory nie mają dostępu do pól statycznych enum, z wyjątkiem pól stałych czasu kompilacji. To ograniczenie jest konieczne, ponieważ te pola statyczne nie zostały jeszcze zainicjowane podczas uruchamiania konstruktorów.

Moje pytanie dotyczy linii:

„Zauważ, że stałe operacji są umieszczane na mapie stringToEnum z bloku statycznego, który działa po utworzeniu stałych”.

Myślałem, że blok statyczny zostanie wykonany przed uruchomieniem konstruktora. Są one faktycznie wykonywane podczas czasu ładowania klasy.

Czego mi tu brakuje?

questionAnswers(3)

yourAnswerToTheQuestion