加载一个类的整体过程通常包括以下几个步骤:
-
加载:
- 类加载器根据类的全限定名(包括包名和类名)查找类文件的字节码数据。
- 类加载器将字节码数据读入内存,并创建一个代表该类的
Class对象。
-
验证:
- 验证阶段确保类文件的字节码符合Java虚拟机规范,防止安全漏洞和潜在的执行问题。
- 验证过程包括文件格式验证、元数据验证、字节码验证和符号引用验证。
-
准备:
- 准备阶段为类的静态变量分配内存,并设置默认的初始值,例如零值(对于数值类型)或null(对于引用类型)。
-
解析:
- 解析阶段将符号引用转换为直接引用。符号引用是一种标识,它使用符号来表示所引用的目标。直接引用则是直接指向目标的指针、偏移量或句柄。
- 解析过程包括将类或接口、字段和方法的符号引用解析为对应的直接引用。
-
初始化:
- 初始化阶段对类的静态变量进行赋值,并执行静态代码块中的初始化代码。
- 在初始化阶段,虚拟机会按照严格的顺序来执行初始化,保证父类的初始化先于子类的初始化。
-
使用:
- 经过以上步骤,类已经被加载、验证、准备、解析和初始化,可以被程序使用。
- 在使用阶段,可以创建对象、调用方法、访问字段等,实现对类的具体操作。
需要注意的是,这些步骤并不是严格按照顺序执行的,Java虚拟机在加载类时会根据需要进行即时编译、延迟加载等优化操作。此外,类加载过程还可以通过自定义类加载器来扩展或修改默认的加载行为。

被折叠的 条评论
为什么被折叠?



