生成这 4 条指令最常见的 Java 代码场景是:
1) 使用 new 关键字实例化对象的时候
2) 读取或设置一个类的静态字段的时候 (被 final 修饰, 已在编译器把结果放入常量池的静态字段除外)
3) 调用一个类的静态方法的时候
4) 使用 java.lang.reflect 包的方法对类进行反射调用的时候 (Example:Class.forName("com.lyj.load"))
5) 当初始化一个类的时候, 如果发现其父类还没有进行过初始化, 则需要先触发其父类的初始化
6) 当虚拟机启动时, 用户需指定一个要执行的主类 (包含 main 方法的那个类), 虚拟机会先初始化这个类
不被初始化的情况:
1. 通过子类引用父类的静态字段, 子类不会被初始化.
2. 通过数组来引用类不会被初始化
3. 调用类的常量类不会被初始化
来源: http://www.bubuko.com/infodetail-2938761.html