Java枚举为什么静态行只执行一次?
结果是:Java枚举为什么静态行只执行一次?,java,enums,enumeration,Java,Enums,Enumeration,结果是: 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)
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;
}
}
这里有三个不同的因素:
private Enums()
{
System.out.println(3);
}
这是构造函数。它(或其他一些潜在的构造函数)在创建实例时运行
{
System.out.println(1);
}
这是一个实例初始值设定项。它在构造对象时运行,而不管使用哪个构造函数
static
{
System.out.println(2);
}
这是一个静态初始值设定项。一旦这个类被加载到JVM中,它就会运行,不管是否正在创建实例。但是,由于我们处理的是枚举,因此必须在加载类时创建它的所有实例。这就是为什么它在三个构造函数和初始值设定项之后运行。要补充@smallhacker answer,您应该阅读中的答案 Uff!什么是静态初始值设定项? 静态初始值设定项是java类中的静态{}代码块, 在调用构造函数或main方法之前只运行一次
您对Java中
静态的含义有何理解?您的问题措辞非常奇怪。“但是如果您使用static关键字,它只运行一次”,这里似乎是指构造函数,但构造函数仍然执行了三次。它只是执行一次的静态块。