类加载的过程:

类加载分为加载、链接(验证、准备、解析)和初始化三个阶段。加载时,类模板进入方法区,创建class对象入堆。链接阶段验证类的语法,准备阶段为静态变量分配默认值,解析阶段将符号引用转为直接引用。初始化则是为静态变量赋予正确初始值,执行静态成员和静态代码块。父类会先被加载,但某些情况如调用静态变量、通过数组定义的类引用等不会触发初始化。
摘要由CSDN通过智能技术生成

 【同一个类只会加载一次,不会重复加载】

1. 加载:  把当前class类模板放入到对应的方法区的实现中(元空间/方法区),并且创建对应的class对象放入到堆中。(每个class中都有一个常量池记录: 类名/方法名/参数类型 的符号引用,基本类型的参数会在此阶段进行赋值) 

             符号引用: 就是一种临时的表示方式,没有对应具体的实体指向。

2. 链接:           又分为三个阶段

        2.1 验证: 检查当前类的语法是否正确,版本是否对应等等。

        2.2 准备: 为静态变量分配空间对应的空间并赋予默认值。但静态常量在编译阶段就分配了内存空间,在此阶段进行赋值。

        2.3 解析: 就是把class中的常量池对应的符号引用 转变 为直接引用【使用的运行时常量池也叫动态链接】,即指向准备阶段中分配的内存空间。

3. 初始化:    

        简单来说就是为类的静态变量赋予正确的初始值 (使用的空间是准备阶段中分配的内存空间)。 

        初始化阶段其实就是执行所有静态成员和静态代码块。 执行这个是从上向下执行,没有优先级

 如果有父类则会先进行加载父类。

不会触发此类的初始化:

             1.  调用父类中的静态变量且没有在本类中写这个变量

             2.  通过数组定义的类引用

             3. 调用此类的静态常量

             4. 使用ClassLoder类的LoadClass()方法加载一个类

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值