在 Java 中,类加载是 JVM 将类的字节码文件加载到内存并生成对应的 Class
对象的过程。以下情况会触发 Java 类的加载:
- 首次创建类的实例:
- 当使用
new
关键字创建某个类的实例时,JVM 会先加载该类。
- 当使用
- 访问类的静态成员:
- 当访问类的静态字段或调用静态方法时,JVM 会加载该类。例如:
System.out.println(MyClass.staticField); MyClass.staticMethod();
- 当访问类的静态字段或调用静态方法时,JVM 会加载该类。例如:
- 反射调用:
- 使用反射机制(如
Class.forName()
)加载类时,会触发类加载。例如:Class.forName("com.example.MyClass");
- 使用反射机制(如
- 子类初始化:
- 当初始化一个类的子类时,JVM 会先加载并初始化其父类。
- 主类加载:
- 当运行一个 Java 程序时,包含
main
方法的类会被 JVM 加载。
- 当运行一个 Java 程序时,包含
- 动态加载:
- 在某些框架或应用中,类可能会在运行时动态加载,例如通过
ClassLoader
的loadClass()
方法。
- 在某些框架或应用中,类可能会在运行时动态加载,例如通过
- 接口默认方法调用:
- 当调用接口的默认方法时,JVM 会加载该接口的实现类。
- JVM 启动时的引导类加载:
- JVM 启动时会加载核心类库(如
java.lang.*
),这些类由引导类加载器(Bootstrap ClassLoader)加载。
- JVM 启动时会加载核心类库(如
总结
类加载是 Java 程序运行的基础,通常在首次使用类时触发。理解类加载的时机有助于优化程序性能和排查类加载相关的问题。
THE END
暂无评论内容