我的示例枚举Singleton类是:
public class Test{
public enum MyClass{
INSTANCE;
private static String name = "Hello";
MyClass() {
test();
}
private static void test(){
name = name + "World";
System.out.println(name);
}
}
public static void main(String a[]){
MyClass m1 = MyClass.INSTANCE;
}
}
获得的输出:nullWorld
预期输出:HelloWorld
在main()中,如果
MyClass m1 = MyClass.INSTANCE;
替换为
MyClass.INSTANCE.test();
然后,输出如预期的那样是HelloWorld。
这表明在构造函数完成执行之前,不会初始化静态字段。
问题:如何实现在构造函数内调用访问静态字段的方法的功能?
答案 0 :(得分:2)
这是因为INSTANCE
是在name
之前声明的,所以它是在初始化name
之前创建和初始化的。
这有效:
public enum MyClass{
INSTANCE;
private static final String name = "Hello";
MyClass() {
test();
}
private static void test(){
String name1 = name + "World";
System.out.println(name1);
}