上一篇:类加载三:数组实例,其类型是由jvm在运行期动态生成,动态生成的类型,其父类型就是Object
四、类在初始化时,初始化执行顺序为代码顺序。代码如下:
public class Mytest06 {
public static void main(String[] args) {
//Singleton singleton = Singleton.getSingleton();
System.out.println("counter1:" + Singleton.counter1);
System.out.println("counter2:" + Singleton.counter2);
}
}
class Singleton {
public static int counter1;//准备阶段赋值0
@SuppressWarnings("unused")
private static Singleton singleton = new Singleton();//调用私有的构造方法
private Singleton() {
counter1 ++;//初始化值+1 = 1
counter2 ++;//初始化值+1 = 1 准备阶段重要性
System.out.println("--counter1:" + Singleton.counter1);
System.out.println("--counter2:" + Singleton.counter2);
}
public static int counter2 = 0;//准备阶段赋值0 ,构造方法完成后为1,初始化接口赋值0
/*public static Singleton getSingleton() {
return singleton;
}*/
}
结果:
--counter1:1
--counter2:1
counter1:1
counter2:0
说明:
在准备阶段,counter1,counter2值赋为0
初始化阶段,执行静态代码块后,counter1,counter2值为1,并打印
--counter1:1
--counter2:1
执行代码块后又执行给counter2赋值0。并打印main方法
counter1:1
counter2:0