类的使用

134 阅读1分钟

类的主动使用和被动使用主要是观察clinit方法是否在加载阶段执行,如果执行则是类的主动使用否则是类的被动使用

类的主动使用

类的主动使用指的是执行clinit方法,触发类的初始化方法。
主动使用具体可以分为以下几种情况:

  • 创建类的实例变量时会触发类的初始化;
  • 调用类的静态方法时会触发类的初始化;(包括main执行的时候会先触发当前类的clinit方法)
  • 当调用类的非final字段时会触发类的初始化;如果这个final修饰的静态字段需要执行字节码那么也会执行类的初始化方法;
  • 主动得到类的.class对象的时候会触发类的初始化;
  • 当子类进行初始化时,也会让父类进行初始化;但是如果是实现的接口,那么这个接口不会执行类的初始化方法;同时如果是一个接口继承了另外一个接口,当前接口的初始化也不会伴随父接口的初始化;
  • 如果一个接口实现了一个default方法,那么这个接口当作类看待,类的初始化会触发接口的初始化;

类的被动使用

类的被动使用指的是不执行clinit方法,不会触发类的初始化方法 类的被动使用可以分为以下几种情况

  • 子类访问父类的静态字段的时候(非字面量)不会导致子类的初始化;
  • 定义数组也不会初始化这个类;
  • classLoader加载类的时候,不会导致类的初始化!!!!!!!!!!!!