Java面试题之什么情况下会触发类的初始化

mac2025-08-05  1

以下情况会触发类的初始化:

遇到new,getstatic,putstatic,invokestatic这4条指令;使用java.lang.reflect包的方法对类进行反射调用;初始化一个类的时候,如果发现其父类没有进行过初始化,则先初始化其父类(注意!如果其父类是接口的话,则不要求初始化父类);当虚拟机启动时,用户需要指定一个要执行的主类(包含main方法的那个类),虚拟机会先初始化这个主类;当使用jdk1.7的动态语言支持时,如果一个java.lang.invoke.MethodHandle实例最后的解析结果REF_getstatic,REF_putstatic,REF_invokeStatic的方法句柄,并且这个方法句柄所对应的类没有进行过初始化,则先触发其类初始化;

以下情况不会触发类的初始化:

同类子类引用父类的静态字段,不会导致子类初始化。至于是否会触发子类的加载和验证,取决于虚拟机的具体实现;通过数组定义来引用类,也不会触发类的初始化;例如:People[] ps = new People[100];引用一个类的常量也不会触发类的初始化
最新回复(0)