【发布时间】:2018-09-14 16:36:47
【问题描述】:
最初我以为我会在这里遇到先有鸡还是先有蛋的问题,但在单元测试中探索这一点并不表示有任何问题。我想了解这里发生了什么。我会认为由于枚举是静态的和最终的,MyEnum 构造函数将在 JVM 加载 MyClass 时运行。但是在我的测试中,它在“MyEnum 构造函数”之前打印“getValue”。
MyClass {
private enum MyEnum {
VALUE;
MyEnum() {
System.out.println("MyEnum constructor");
MyClass clazz = new MyClass();
}
}
public MyEnum getValue() {
System.out.println("getValue");
return MyEnum.VALUE;
}
}
public class MyClassTest {
@Test
public void testStuff() {
MyClass clazz = new MyClass();
clazz.getValue();
}
}
【问题讨论】:
-
你能澄清一下你认为静态初始化时间是什么吗?
-
我的意思是当类被加载时。我不认为这是重复的,它在类中有一个私有枚举,而提议的欺骗没有。
-
MyEnum类型的位置并不重要。它将像任何类一样根据stackoverflow.com/questions/3499214/… 进行初始化,即。 使用了一个非常量的静态字段。该字段是枚举常量。