结果是:
1
3
1
3
1
3
2
构造函数针对A,B和C运行(3次)。但是,如果您使用static关键字,则只能运行一次。这是什么原因呢?为什么这行最后执行?
enum Enums {
A, B, C;
{
System.out.println(1);
}
static {
System.out.println(2);
}
private Enums() {
System.out.println(3);
}
}
public class MainClass{
public static void main(String[] args) {
Enum en = Enums.C;
}
}
答案 0 :(得分:1)
这里有三种不同的玩法:
private Enums()
{
System.out.println(3);
}
这是构造函数。创建实例时,它(或其他潜在的构造函数)运行。
{
System.out.println(1);
}
这是实例初始化程序。它在构造对象时运行,无论使用哪种构造器。
static
{
System.out.println(2);
}
这是静态初始化程序。一旦将此类加载到JVM中,无论是否正在创建实例,它都将运行。但是,由于我们正在处理枚举,因此必须在加载类时创建其所有实例。这就是为什么它在三个构造函数和初始化程序之后运行。
答案 1 :(得分:1)
要补充@smallhacker答案,您应该阅读Static initializer in Java
中的答案U!什么是静态初始值设定项?
静态初始值设定项是java类中的静态{}代码块, 并且仅在调用构造函数或main方法之前运行一次。