面试题答案
一键面试在Java反射机制中,以下场景会触发类的加载:
- 使用
new
关键字创建对象时:
当执行上述代码创建ClassA obj = new ClassA();
ClassA
类的实例时,会触发ClassA
类的加载。 - 访问类的静态成员时:
当访问System.out.println(ClassB.staticField);
ClassB
类的静态字段staticField
时,会触发ClassB
类的加载。同样,调用类的静态方法也会触发类加载,例如ClassB.staticMethod();
- 使用
Class.forName()
方法时:Class<?> clazz = Class.forName("com.example.ClassC");
Class.forName("com.example.ClassC")
会触发com.example.ClassC
类的加载。如果forName
方法使用带有第二个参数true
的重载形式(Class.forName("com.example.ClassC", true, classLoader)
),第二个参数表示是否初始化类,true
表示初始化,此时不仅触发类加载,还会执行类的初始化阶段。 - 子类的加载会触发父类的加载:
当创建class Parent {} class Child extends Parent {} Child child = new Child();
Child
类的实例时,会先触发Parent
类的加载,然后再加载Child
类。