类从加载到对象实例化的过程顺序

本文详细介绍了JVM加载类的过程,包括加载、连接(验证、准备、解析)及初始化三个阶段。阐述了类字节码如何从硬盘读取到内存,并通过类加载器生成Class对象,以及初始化过程中静态成员和非静态成员的赋值顺序。

JVM加载类过程:

1.加载:

  • 类字节码文件从硬盘读入到内存中
  • 类加载器(BootStrapClassLoader,ExtensionClassLoader,SystemClassLoader)加载字节码文件 在方法区存放生成类对应的Class对象

---------

2.连接

这个过程又包括了:验证、准备、解析

  • 验证:对class等进行验证的过程;
  • 准备阶段:为静态变量开辟内存空间并赋上默认初始值;
  • 解析:符号化链接解析成实际链接(调用对象方法符号表示转变为方法的实际地址)

----------

3.初始化

  • 执行静态成员的初始化语句(为在连接部分中的准备阶段中已经分配内存空间和赋上默认值的静态成员赋值)
  • 执行静态语句块

类加载过程是先加载父类,然后再加载子类

类加载完毕后,如果要进行对象实例化就需要执行:

父类非静态成员初始化语句(包括代码块,按照在类定义中的顺序执行)->父类构造函数->子类非静态成员初始化语句(包括代码块,按照在类定义中的顺序执行)->子类构造方法

下面是总结的一个顺序,比较清楚:

有父类的情况
1. 加载父类
    1.1 为静态属性分配存储空间并赋初始值 
    1.2 执行静态初始化块和静态初始化语句(从上至下)
2. 加载子类
    2.1 为静态属性分配存储空间
    2.2 执行静态初始化块和静态初始化语句(从上至下)
3. 加载父类构造器
    3.1 为实例属性分配存数空间并赋初始值 
    3.2 执行实例初始化块和实例初始化语句
    3.3 执行构造器内容
4. 加载子类构造器
    4.1 为实例属性分配存数空间并赋初始值 
    4.2 执行实例初始化块和实例初始化语句
    4.3 执行构造器内容
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值