类什么时候会被初始化

159 阅读1分钟
  • 类的主动引用(一定会发生类的初始化)
    1. new一个类的对象
    2. 调用类的静态成员(除了final常量)和静态方法
    3. 使用java.lang.reflect包的方法对类进行反射调用
    4. 当虚拟机启动,java Hello,则一定会初始化Hello类。说白了就是先启动main方法所在的类
    5. 当初始化一个类,如果其父类没有被初始化,则先会初始化他的父类
  • 类的被动引用(不会发生类的初始化)
    1. 当访问一个静态域时,只有真正声明这个域的类才会被初始化
      - 通过子类引用父类的静态变量,不会导致子类初始化
    2. 通过数组定义类引用,不会触发此类的初始化
    3. 引用常量不会触发此类的初始化(常量在编译阶段就存入调用类的常量池中了)