1.创建对象
- 通过 new关键字
- 通过反射机制( 调用Java.lang.Class或java.lang.reflect.Constructor类的newInstance()方法)
// 1. 使用Class类的newInstance()方法创建对象
User user = User.class.newInstance();
// 2. 使用Constructor类的newInstance() 方法创建对象
Constructor<User> constructor = User.class.getConstructor();
User user = constructor.newInstance();
- 调用clone()方法
// 1. 调用一个对象的clone方法,jvm就会创建一个新的对象
Object clone = user.clone();
a. 使用clone方法,需要先实现Cloneable接口
b. 重写clone()方法;()
- 使用反序列化 (反序列化一个对象时,类需要实现Serializable接口)
Transient/序列化ID
2.复制对象
- 浅表复制 (调用clone方法)
a. 需要调用clone方法的对象实现Cloneable接口
b. 修改clone方法的修饰符和返回值类型
c. 重写clone方法并调用父类的clone方法(返回值类型强转)
浅表复制仅仅创建新的对象,对象的成员内容底层哈希值是一致的,不管是原对象还是克隆对象,只要其中一个修改了成员的数据,就会影响所有的原对象和克隆对象 - 深层复制