对一个类进行“主动引用”触发类的初始化

  /*1.创建类的实例

  2.访问类的静态变量(除常量【被final修辞的静态变量】原因:常量一种特殊的变量,因为编译器把他们当作值(value)而不是域(field)来对待。

  3.访问类的静态方法
  4.反射如(Class.forName("my.xyz.Test"))
  5.当初始化一个类时,发现其父类还未初始化,则先出发父类的初始化
  6.虚拟机启动时,定义了main()方法的那个类先初始化*/
class SingleTon {
  private static SingleTon singleTon = new SingleTon();// 进入类初始化阶段 先执行①  若把它调到count2下面  将影响结果
  public static int count1;// ⑤ 系统默认分配,从对象中载入域(field)的值=1;
  public static int count2 = 0;// ⑥ 赋值 覆盖掉count2=1;

  private SingleTon() {// ②
    count1++;// ③
    count2++;// ④
  }

  public static SingleTon getInstance() {
  return singleTon;
  }
}

public class Test1 {
  public static void main(String[] args) {
  // SingleTon singleTon = SingleTon.getInstance();
  System.out.println("count1=" + SingleTon.count1);// 1
  System.out.println("count2=" + SingleTon.count2);// 0
  }
}

原文地址:https://www.cnblogs.com/Lovemeifyoudare/p/11321968.html