7.2 类加载的时机

这一章要了解:虚拟机如何加载这些Class文件?Class文件中的信息加入到虚拟机后会发生什么?

类从被加载到虚拟机内存开始,到卸载出内存为止,它的整个生命周期包括:加载,验证,准备,解析,初始化,使用和卸载七个阶段,其中验证,准备,解析统称为连接

加载,验证,准备,初始化和卸载这五个阶段的顺序是确定的

这些阶段通常都是互相交叉地混合式进行的,通常会在一个阶段执行的过程中调用,激活另一个阶段,因此说按部就班地“开始”,而不是“进行”或“完成”

虚拟机规范严格规定了有且只有5种情况必须对类进行“初始化”:(主动引用)

  1. 遇到new,getstatic,putstatic或invokestatic,如果类没有进行初始化,则需要先触发其初始化。
  2. 使用java.lang.reflect包的方法对类进行反射调用的时候,如果类没有进行过初始化,则需要先触发其初始化
  3. 当初始化一个类的时候,如果发现其父类还没有进行过初始化,则需要先触发其父类的初始化
  4. 当虚拟机启动时,用户需要指定一个要执行的主类,虚拟机会先初始化这个主类
  5. 当使用jdk1.7的动态语言支持时,解析结果的方法句柄所对应的类没有进行过初始化

ps:通过其子类来引用父类中定义的静态字段,只会触发父类的初始化而不会触发子类的初始化

接口的加载过程与类的加载过程的异同:

  1. 相同点:接口和类都有初始化过程
  2. 当一个类初始化时,要求其父类全部都已经初始化过了,但是一个接口在初始化时,并不要求其父接口全部都完成了初始化,只有在真正使用到父接口的时候才会初始化

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值