我理解您的问题是:为什么可以保证在运行静态块之前会初始化枚举常量。答案在JLS中给出,具体示例在#8.9.2.1中给出,并带有以下说明:
静态初始化从上到下进行。
和枚举常量是隐式最终静态的,并在静态初始值设定项块之前声明。
编辑
行为与普通班级没有什么不同。下面的代码打印:
In constructor: PLUSPLUS == null MINUS == nullIn constructor: MINUSPLUS != null MINUS == nullIn static initialiserPLUS != null MINUS != nullIn constructor: after staticPLUS != null MINUS != nullpublic class Operation { private final static Operation PLUS = new Operation("PLUS"); private final static Operation MINUS = new Operation("MINUS"); static { System.out.println("In static initialiser"); System.out.print("PLUS = " + PLUS); System.out.println("tMINUS = " + MINUS); } public Operation(String s) { System.out.println("In constructor: " + s); System.out.print("PLUS = " + PLUS); System.out.println("tMINUS = " + MINUS); } public static void main(String[] args) { Operation afterStatic = new Operation ("after static"); } }


