返回

类的生命周期:类加载究竟做了什么

Android

Java类的生命周期:从诞生到消亡

Java类从诞生到消亡经历了以下几个阶段:

  1. 编译阶段: 将Java源文件(.java)编译成字节码文件(.class)。
  2. 加载阶段: 将字节码文件加载到JVM中,并创建对应的类对象。
  3. 验证阶段: 检查字节码文件是否符合JVM规范。
  4. 准备阶段: 为类中的静态变量分配内存并设置默认值。
  5. 解析阶段: 将字节码文件中的符号引用转换为直接引用。
  6. 初始化阶段: 执行类的静态初始化块和构造函数,完成类的初始化。
  7. 使用阶段: 程序可以通过创建该类的实例来使用该类。
  8. 卸载阶段: 当类不再被使用时,JVM会将其从内存中卸载。

类加载的时机

Java类在以下几种情况下会被加载:

  • 当程序通过 new 创建该类的实例时。
  • 当程序调用该类的静态方法或静态变量时。
  • 当程序显式地加载该类时,可以使用 Class.forName() 方法来显式地加载一个类。
  • 当Java虚拟机启动时,JVM会加载一些必要的类,如 java.lang.Object 类和 java.lang.String 类。

类加载的过程

类加载的过程主要包括以下几个步骤:

  1. 查找类: 类加载器会首先在类加载路径中查找要加载的类。类加载路径是一个由目录或JAR文件组成的集合,JVM会从类加载路径中加载类。
  2. 加载类: 类加载器会将找到的类文件加载到JVM中,并创建对应的类对象。
  3. 验证类: JVM会检查类文件是否符合JVM规范。
  4. 准备类: JVM会为类中的静态变量分配内存并设置默认值。
  5. 解析类: JVM会将类文件中的符号引用转换为直接引用。
  6. 初始化类: JVM会执行类的静态初始化块和构造函数,完成类的初始化。

类加载器的类型

Java中共有三种类型的类加载器:

  • 启动类加载器: 启动类加载器负责加载JVM启动时必要的类,如 java.lang.Object 类和 java.lang.String 类。
  • 扩展类加载器: 扩展类加载器负责加载位于 JAVA_HOME/jre/lib/ext 目录下的类。
  • 系统类加载器: 系统类加载器负责加载位于类路径中的类。

类加载的应用

类加载在Java开发中有着广泛的应用,如:

  • 动态加载类: Java可以通过 Class.forName() 方法来动态加载类。这在需要根据用户输入或运行时条件来加载类时非常有用。
  • 热加载类: Java可以通过修改类文件并重新编译来实现热加载类。这在开发和调试程序时非常有用。
  • 隔离类: Java可以通过使用不同的类加载器来隔离不同的类。这在需要将不同的类库隔离时非常有用。