JVM之类加载器

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历险记

你可能感兴趣的:(JVM之类加载器)