创建对象的方式
new
最常见的方式
变形1:x的静态方法(单例)
变形2:xBuilder/xFactory的静态方法(建造者、工厂模式)
Class的newInstance():放射的方式,只能调用空参的构造器,权限是public,已过时
Constructor的newInstance(x):反射的方式,可以调用空参和有参的构造器,无权限要求
使用clone():不调用任何构造器,当前类需要实现cloneable接口,实现clone()方法,实际是从写Object类的clone()
使用序列化:从文件、网络中获取对象发二进制流
使用第三方库Objensis
创建对象的步骤
1. 判断对象对应的类是否加载、链接、初始化
3. 处理并发问题
采用CAS失败重试、区域加锁保证更新的原子性
每个线程预先分配一块TLAB:通过设置 -XX:+UseTLAB参数来设定
4. 初始化分配到的内存
所有属性设置默认值,保证对象实例字段在不赋值时可以直接使用
5. 设置对象的对象头
6. 执行init方法进行初始化
简述
1. 加载类元信息
2. 为对象分配内存
3. 处理并发问题
4. 属性的默认初始化(零值初始化)
5. 设置对象头信息
6. 属性的显示初始化、代码块中初始化、构造器中初始化
说明:给对象属性赋值的操作(4类)
属性的默认初始化
显式初始化
代码块中初始化
构造器中初始化