创建对象的相关知识补充

创建对象有六种方法:

一,使用new关键字
这个不必多说了,是最常见和最常用的。

二,Class对象的newInstance()方法

Class clazz = Class.forName(className);
Object obj = clazz.newInstance();

三,构造函数对象的newInstance()方法

Constructor constructor = Test.class.getConstructor();
Test test = constructor.newInstance();

四,对象反序列化
就是将一个对象序列化之后,通过反序列化的方式再还原成一个对象。

五,Object对象的clone()方法
clone()方法就是创建一个对象的副本,这个方法可以生成新的对象。

六,使用Unsafe类创建对象
Unsafe类使用起来并不安全,会加大出错的几率,因此官方并不推介使用。
使用反射方式得到Unsafe的对象,再调用allocateInstance(类名.class)可以拿到一个Object对象。


Java对象初始化的步骤:
在博客深入理解Java虚拟机读书笔记(二)–对象的创建与空间分配及定位中,有较为详细的描述,但是篇幅略长,这里做个总结。
步骤一:检查该类型是否已经加载并初始话,没有初始化的话向下一个步骤走。
步骤二:类被正确的加载完以后,在内存中分配空间以用来放置对象。
步骤三:内存分配完成后,将对象中的自己的字段和继承的字段都初始化为对应的零值。
步骤四:设置该对象的对象头,比如该对象是那个类的实现,GC分带信息等。
步骤五:通过构造函数,将字段赋值及其他信息完成,产生一个可用的对象。


再补充一下,类初始话的时候,各个部分的执行顺序。
如果一个类没有继承吉他类,那么初始化的顺序是:
静态变量–>静态代码块–>普通变量–>普通代码块–>构造函数

如果一个类有继承其他父类,那么初始化的顺序是:
父类静态变量–>父类静态代码块–>子类静态变量–>子类静态代码块–>父类普通变量–>父类普通代码块–>父类构造器–>子类普通变量–>子类普通代码块–>子类构造器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值