package com.atChina.jvm;
public class Test6 {
public static void main(String[] args) {
Singleton singleton = Singleton.getInstance();
System.out.println("counter1:"+Singleton.counter1);
System.out.println("counter2:"+Singleton.counter2);
}
}
class Singleton{
/*
* 类的加载,连接,初始化
* 连接又大致分为:验证,准备(为类的静态变量分配内存,并将其初始化为默认值。 基本类型赋为0, 引用类型赋为null),解析.
*
* 连接的准备阶段: counter1,counter2被赋予默认值0, singleton被赋默认值为null
*
* 到了初始化阶段: 代码按照从上到下的顺序给静态变量赋初值.
*/
public static int counter1;
private static Singleton singleton = new Singleton();
// 准备阶段: 没有执行这个构造方法。 初始化阶段,给singleton静态变量赋初值,就会调用该构造方法
private Singleton(){
counter1++;
counter2++;
System.out.println("Singleton().....");
System.out.println(counter1+" "+counter2);
}
public static int counter2 = 2;
public static Singleton getInstance(){
System.out.println("getInstance().....");
return singleton;
}
}