👌Java类初始化时机?
题目详细答案
主动引用
创建类的实例
当使用new关键字创建类的实例时,类会被初始化。
1 | MyClass obj = new MyClass(); |
访问类的静态变量或静态方法
当访问类的静态变量或调用静态方法时,类会被初始化。
1 | System.out.println(MyClass.staticVar); |
反射
通过反射 API 对类进行反射调用时,类会被初始化。
1 | Class.forName("com.example.MyClass"); |
初始化子类
当初始化一个类的子类时,父类会被初始化。
1 | class Parent { |
Java 虚拟机启动时
包含main方法的类在虚拟机启动时会被初始化。例如:
1 | public class Main { |
被动引用
通过子类引用父类的静态字段
通过子类引用父类的静态字段,不会导致子类初始化。
1 | class Parent { |
定义对象数组
定义类的对象数组不会触发类的初始化。例如:
1 | MyClass[] array = newMyClass[10]; // 不会触发 MyClass 的初始化 |
常量引用
引用常量不会触发类的初始化,因为常量在编译阶段会存入调用类的常量池中。例如:
1 | class MyClass { |