关于类初始化的一个诡异问题

圣思园张龙老师关于类加载器的一个例子。

这个打印的是1,1

这个打印的是1,0

 

造成以上的区别的原因就在于:类加载的时候先准备(静态变量赋默认值),然后初始化(赋值或者静态代码块),实例化。

 

类的初始化只有在以下六种情况(主动使用)才会发生:

  1. 创建类的实例,并且不影响子类的初始化
  2. 访问某个类或者接口的静态变量或者赋值
  3. 访问类的静态方法
  4. 反射,比如Class.forName("xxxxxxxxxxxxx")
  5. 初始化一个类的子类
  6. 启动类

类的主动使用:只有访问当前类或者接口的静态变量或者方法时,才认为是主动使用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章