public class Example {
private static Example obj = new Example();
static int v1;
static int v2 = 0;
private Example() {
v1++;
v2++;
}
public static Example getInstance() {
return obj;
}
public static void main(String[] args) {
Example obj = Example.getInstance();
System.out.println(obj.v1);
System.out.println(obj.v2);
}
}
在我的语雀文章之JVM中讲到了类加载时机和类加载过程.
根据理论,我们分析上面的测试代码,最终结果是什么?
加载-链接-初始化
在链接阶段,又分为验证-准备-解析阶段,在准备阶段,会为静态变量分配内存和赋零值.
v1=0,v2=0
在初始化阶段,又会为静态变量赋值.
静态代码从上向下执行
在执行Example obj = new Example();执行构造器,因此v1=1,v2=1
继续执行
static int v1;
static int v2 = 0;
因此最后v1=1,v2=0
公众号: Netty历险记
网友评论