propriedades de enum e efeitos colaterais

Eu tenho uma pergunta sobre o enum (pode ser simples, mas ....). Este é o meu programa:

public class Hello { 
         public enum MyEnum 
         { 
               ONE(1), TWO(2); 
               private int value; 
               private MyEnum(int value) 
               { 
                    System.out.println("hello");  
                    this.value = value; 
               } 
               public int getValue() 
               { 
                    return value; 
               } 
        } 
        public static void main(String[] args)  
        { 
              MyEnum e = MyEnum.ONE; 
        } 
}

e minha pergunta é: Por que a saída é

hello
hello

e não

hello ?

Como o código está "indo" duas vezes para o construtor? Quando é a primeira vez e quando é a segunda? E por que o construtor enum não pode ser público? É a razão pela qual imprime duas vezes e não apenas uma vez?