- 先看下面程序的执行结果
类加载器准备阶段分析(加载器会按照程序中静态变量定义的次序一次给静态变量赋值):
- counter1默认初值为0;
- singleton默认初值为null;
- 构造函数不属于静态内容不会再准备阶段初始化;
- counter2默认初值为0
执行 Singleton instance = Singleton.getInstance();时,由于getInstance()是Singleton的静态方法,所以Singleton类会被初始化,下面进行初始化阶段的分析:
- 调用getInstance()方法导致构造函数的执行;
- 执行完构造函数之后 counter1=1, counter2=1;
- 接着执行counter2=0赋值语句。
所以程序执行到最后输出结果为:
counter1 = 1
counter2 = 0