Java类的加载,链接,初始化

本文深入探讨了Java类加载器的工作原理,包括类的装载、链接和初始化过程。从查找和导入Class文件开始,到校验、准备和解析,直至静态变量的初始化,详细阐述了每个阶段的具体操作和重要意义。了解类加载器的过程有助于开发者更高效地管理和利用类资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

类加载器就是寻找类或接口字节码文件进行解析并构造JVM内部对象表示的组件。在 Java 中,类转载器把一个类装入JVM中,需要经过以下步骤:
 
1.装载:查找和导入Class文件;
 
2.链接: 执行校验、准备和解析步骤,其中解析步骤是可以选择的:
 
          a)校验: 检查载入Class文件数据的正确性;
                   验证就是要确保java类型数据格式 的正确性,并适于JVM使用。
          b)准备:给类的静态变量分配存储空间;
                  JVM为静态变量分配内存空间,并设置默认值,注意,这里是设置默认值,比如说int型的变量会被赋予默认值0 。在这个阶段,JVM可能还会为一些数据结构分配内存,目的 是提高运行程序的性能,比如说方法表。
          c)解析:将符号引用变成直接引用;
                  在类型的常量池中寻找类、接口、字段和方法的符号引用,把这些符号引用替换成直接引用。这个阶段可以被推迟到初始化之后,当程序运行的过程中真正使用某个符号引用的时候 再去解析它。

 3.初始化:对类的静态变量、静态代码块进行初始化工作。

传说中的初始化

类会在首次被“主动使用”时执行初始化,为类(静态)变量赋予正确的初始值。在Java代码中,一个正确的初始值是通过类变量初始化语句或者静态初始化块给出的。而我们这里所说的主动使用 包括:

1.        创建类的实例

2.        调用类的静态方法

3.        使用类的非常量静态字段

4.        调用Java API中的某些反射方法

5.        初始化某个类的子类

6.        含有main()方法的类启动时

 

初始化一个类包括两个步骤:

1、  如果类存在直接父类的话,且直接父类还没有被初始化,则先初始化其直接父类

2、  如果类存在一个初始化方法,就执行此方法

注:初始化接口并不需要初始化它的父接口。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值