IT评测·应用市场-qidao123.com技术社区
标题:
Java 的类加载过程是怎样的?
[打印本页]
作者:
李优秀
时间:
2025-3-13 04:10
标题:
Java 的类加载过程是怎样的?
Java 的类加载过程
<hr>
问题
Java 的类加载过程是怎样的?
<hr>
解答
Java 的类加载过程是将 .class 文件中的字节码加载到 JVM 中,并进行验证、剖析和初始化,最终使类可以或许利用的过程。整个类加载过程由以下三个阶段组成:
加载(Loading)
、
毗连(Linking)
和
初始化(Initialization)
。
<hr>
类加载过程详解
1. 加载(Loading)
加载是类加载的第一个阶段,包罗以下内容:
寻找和加载类的二进制数据
:
通过类的全限定名定位 .class 文件。
支持从多种泉源加载(如文件体系、网络、JAR 包等)。
将类的字节码读入内存
:
将 .class 文件中的内容读取到 JVM 内部的运行时数据区(方法区)。
生成 Class 对象
:
在 JVM 的方法区中生成类的 Class 对象,用于表示这个类的元数据。
<hr>
2. 毗连(Linking)
毗连阶段将类的二进制数据组合进 JVM,同时验证和预备类。包罗以下三个子阶段:
验证(Verification)
:
确保类的字节码符合 JVM 规范。
验证内容:
文件格式查抄(例如魔数是否正确)。
元数据查抄(类的字段、方法是否合法)。
字节码验证(是否符合 Java 语言规则)。
目的:保证字节码的安全性和可靠性。
预备(Preparation)
:
为类的静态变量分配内存,并初始化为默认值。
基本类型:分配初始值(如 0、null 等)。
引用类型:初始化为 null。
仅仅分配内存,未实行任何逻辑。
剖析(Resolution)
:
将常量池中的符号引用(Symbolic References)转换为直接引用(Direct References)。
符号引用:以字符串形式描述引用的类、方法、字段等。
直接引用:运行时的内存地点。
<hr>
3. 初始化(Initialization)
初始化是类加载的最后阶段,主要任务是:
实行类的静态初始化块
(static {})和静态变量的初始化。
按顺序实行类的静态变量和静态块,确保只实行一次。
假如父类未被加载,先加载父类。
class Example {
static int x = 10;
static {
System.out.println("Static block executed.")
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/)
Powered by Discuz! X3.4