我知道有很多与此类似的问题,但我想获得有关此问题的一些详细解释。
假设我有这个代码 -
public class Finalexamples {
public int num = 3;
public static int num2;
public static Finalexamples a;
public Finalexamples(){
Finalexamples.num2 = 4;
}
static{
a = new Finalexamples();
System.out.println(num2);
Finalexamples.num2 = 5;
}
public static void main(String[] args) {
System.out.println("Starting...");
}
}
- 当 JVM 加载 .class 文件时,是否首先使用默认值初始化静态变量,然后在程序运行时使用文字值?
- 在我的示例中,静态 block 输出“4”(固定),如果有人可以解释为什么它不是 0?
最佳答案
为什么0
?它应该输出 4
而不是。
类加载时,静态字段和语句按照出现的顺序读取并执行。
所以这些首先执行:
public static int num2;
public static Finalexamples a;
然后调用:
static{
a = new Finalexamples();
System.out.println(num2);
Finalexamples.num2 = 5;
}
此:a = new Finalexamples();
执行:Finalexamples.num2 = 4;
因此System.out.println(num2);
显示4
关于java - java中的静态初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43452032/