Java中的forName
方法是用于加载类的一种方式,它属于Class
类。forName
方法的类加载顺序遵循Java的类加载机制,具体如下:
- 加载(Loading):当
forName
方法被调用时,Java虚拟机(JVM)首先会检查该类是否已经被加载。如果没有,JVM会尝试使用指定的类加载器(ClassLoader)加载类。类加载器会按照父子关系链依次尝试加载类,直到找到合适的类加载器进行加载。如果没有找到合适的类加载器,则会抛出ClassNotFoundException
异常。 - 验证(Verification):在类加载完成后,JVM会对类的字节码进行验证,确保其符合Java语言规范和JVM规范。如果验证失败,将抛出
VerifyError
异常。 - 准备(Preparation):在验证通过后,JVM会为类分配内存并初始化类变量(static fields)。此时,类变量会被赋予默认值,例如数值类型的变量会被赋值为0,布尔类型的变量会被赋值为false,引用类型的变量会被赋值为null。
- 解析(Resolution):在准备阶段之后,JVM会解析类的字节码,将符号引用(例如类名、方法名和字段名)替换为直接引用(内存地址)。
- 初始化(Initialization):在解析阶段之后,JVM会执行类的初始化方法(
<clinit>
)。这个方法是由编译器自动生成的,包含了类变量的显式初始化代码和静态代码块。在初始化阶段,类变量会被赋予实际值。
需要注意的是,forName
方法只负责加载类,而不会执行类的初始化。如果你想在加载类后立即初始化类,可以使用Class.forName("your.package.YourClass", true, classLoader)
方法,其中第二个参数true
表示在加载类后立即初始化类。
网友留言: