类加载器准备阶段和初始化阶段的重要意义

  • 先看下面程序的执行结果

     

 类加载器准备阶段分析(加载器会按照程序中静态变量定义的次序一次给静态变量赋值):

  1. counter1默认初值为0;
  2. singleton默认初值为null;
  3. 构造函数不属于静态内容不会再准备阶段初始化;
  4. counter2默认初值为0

执行 Singleton instance = Singleton.getInstance();时,由于getInstance()是Singleton的静态方法,所以Singleton类会被初始化,下面进行初始化阶段的分析:

  1. 调用getInstance()方法导致构造函数的执行;
  2. 执行完构造函数之后  counter1=1, counter2=1;
  3. 接着执行counter2=0赋值语句。

 所以程序执行到最后输出结果为:

counter1 = 1
counter2 = 0

发布了28 篇原创文章 · 获赞 5 · 访问量 1182

猜你喜欢

转载自blog.csdn.net/weixin_40391011/article/details/103976306