1:遇到如下关键词。
new: 使用new关键字实例化对象的时候。
getstatic/putstatic:读取或设置一个类的静态字段。
invokestatic:调用一个类的静态方法。
2:对类进行反射调用的时候。如果没有进行初始化,则需要先触发其初始。
3:若父类没有进行初始化,则先父后子。
4:虚拟机启动时,会先初始化指定的主类。(包含main()方法的那个类)
5:使用动态语言支持时,若实例的最后解析结果的方法句柄,其方法句柄所对应的类没有进行过初始化。
以上五种情况必须对类进行初始化。
备注:被final修饰,和static的类变量在类进行准备的时候就进行了初始化。
Boy-20180721
网友评论