类加载各个阶段

本文详细介绍了Java虚拟机的类加载过程,包括加载、连接、验证、准备、解析和初始化等阶段。强调了静态变量的分配和初始化时机,以及触发类初始化的各种情况。同时,讨论了不会导致类初始化的一些操作,如访问静态常量和创建类的数组等。

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

加载
将类的字节码载入方法区中,如果这个类还有父类没有进行加载,可以先加载父类。
加载和连接可能是交替运行的。在这里插入图片描述
连接
验证阶段:验证类是否符合jvm规范,安全性检查。
准备阶段:
static变量分配空间和赋值是两个步骤,分配空间在准备阶段完成,赋值在初始化阶段完成。
如果static变量是final的基本类型,那么编译阶段值就已经确定了,赋值在准备阶段完成。
如果static变量是final的,但属于引用类型,那么赋值也会在初始化阶段完成。
解析阶段:
将常量池中的符号引用解析为直接引用
初始化
初始化即调用()V,虚拟机会保证这个类的构造方法的线程安全
发生的时机:
概括的说,类的初始化时懒惰的
main方法所在的类,总会被首先初始化
首次访问这个类的静态变量或静态方法
子类初始化,如果父类还没初始化,会引发类初始化
子类访问父类的静态变量,只会触发父类的初始化
Class.forname
new会导致初始化

不会导致类初始化的情况
访问类的static final静态常量不会触发初始化
类对象.class不会触发初始化
创建该类的数组不会触发初始化
类加载器的loadclass方法
Class.forname的参数2为false

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值