Java创建对象过程:类的初始化和实例化


前言

Java对象的创建过程往往包括类初始化和类实例化两个阶段。类的初始化在前、类的实例化在后。

注意:这与spring的bean正好相反,spring的bean的生命周期,主要是先进行实例化java对象,然后在进行操作属性、最后进行初始化,这里初始化并不是java对象的初始化,而是spring的参数的初始化(initMethod、afterPropertiesSet)等。(@PostConstruct是前置拦截初始化方法)

一、类的初始化

是完成程序执行前的准备工作,初始化相关静态代码块和赋值,并分配空间,初始化只在类加载的时候执行一次。
其中类加载具体过程详见:加载 >> 验证 >> 准备 >> 解析 >> 初始化 >> 使用 >> 卸载

类的初始化顺序参考如下:
类的初始化顺序

二、类的实例化

实例的构造器调用()、分配内存、属性值得定制化赋值机制

类实例化过程
检测类是否被加载没有加载的先加载→为新生对象分配内存→将分配到的内存空间都初始化为零值→对对象进行必要的设置(对象头)→执行方法把对象进行初始化:

  • 检测类是否被加载
  • 为新生对象分配内存
  • 确定对象内存大小
  • 对象头:大小确定 与类无关 与操作系统有关,包括标记字段和类型指针。
  • 实例数据
    即使父类的实例字段被子类覆盖或者被private修饰,都照样为其分配内存,相同宽度的字段会分配在一起,其次,父类的字段在子类之前赋值和初始化。
  • 对齐填充
  • 初始化零值
  • 对象的访问定位
  • 执行init方法

创建对象的几种方式

  1. 使用new关键字
  2. Class对象的newInstance()方法
  3. 构造函数对象的newInstance()方法
  4. 对象反序列化
  5. Object对象的clone()方法
  6. 使用Unsafe类创建对象

运行内存

参考引用:
虚拟机研究系列-你真正掌握了Java对象创建的流程吗?
java类的初始化和实例化区别
java创建对象的过程详解(从内存角度分析)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值