返回
类的生命周期:类加载究竟做了什么
Android
2023-10-25 09:02:27
Java类的生命周期:从诞生到消亡
Java类从诞生到消亡经历了以下几个阶段:
- 编译阶段: 将Java源文件(.java)编译成字节码文件(.class)。
- 加载阶段: 将字节码文件加载到JVM中,并创建对应的类对象。
- 验证阶段: 检查字节码文件是否符合JVM规范。
- 准备阶段: 为类中的静态变量分配内存并设置默认值。
- 解析阶段: 将字节码文件中的符号引用转换为直接引用。
- 初始化阶段: 执行类的静态初始化块和构造函数,完成类的初始化。
- 使用阶段: 程序可以通过创建该类的实例来使用该类。
- 卸载阶段: 当类不再被使用时,JVM会将其从内存中卸载。
类加载的时机
Java类在以下几种情况下会被加载:
- 当程序通过
new
创建该类的实例时。 - 当程序调用该类的静态方法或静态变量时。
- 当程序显式地加载该类时,可以使用
Class.forName()
方法来显式地加载一个类。 - 当Java虚拟机启动时,JVM会加载一些必要的类,如
java.lang.Object
类和java.lang.String
类。
类加载的过程
类加载的过程主要包括以下几个步骤:
- 查找类: 类加载器会首先在类加载路径中查找要加载的类。类加载路径是一个由目录或JAR文件组成的集合,JVM会从类加载路径中加载类。
- 加载类: 类加载器会将找到的类文件加载到JVM中,并创建对应的类对象。
- 验证类: JVM会检查类文件是否符合JVM规范。
- 准备类: JVM会为类中的静态变量分配内存并设置默认值。
- 解析类: JVM会将类文件中的符号引用转换为直接引用。
- 初始化类: JVM会执行类的静态初始化块和构造函数,完成类的初始化。
类加载器的类型
Java中共有三种类型的类加载器:
- 启动类加载器: 启动类加载器负责加载JVM启动时必要的类,如
java.lang.Object
类和java.lang.String
类。 - 扩展类加载器: 扩展类加载器负责加载位于
JAVA_HOME/jre/lib/ext
目录下的类。 - 系统类加载器: 系统类加载器负责加载位于类路径中的类。
类加载的应用
类加载在Java开发中有着广泛的应用,如:
- 动态加载类: Java可以通过
Class.forName()
方法来动态加载类。这在需要根据用户输入或运行时条件来加载类时非常有用。 - 热加载类: Java可以通过修改类文件并重新编译来实现热加载类。这在开发和调试程序时非常有用。
- 隔离类: Java可以通过使用不同的类加载器来隔离不同的类。这在需要将不同的类库隔离时非常有用。