对象创建的方式
- 使用new关键字
- 使用clone方法
- 反射机制
- 反序列化
- 1、3方式会显示的调用对象的构造函数
- 2是在在内存上对已存在的对象的一种引用,不会调用构造函数
- 4是从文件中还原类的对象
clone:
拷贝对象返还一个新对象,不是对源对象的引用,并且拷贝是对源对象的数据块的拷贝,包换源对象的信息,不是对象的初始信息,且不会调用构造函数。
前提:类必须实现Cloneable接口,Cloneable接口是是一个空接口,实现了该接口才支持clone操作。
疑问:既然Cloneable接口是空接口,且Java的对象中默认父类Object中也有clone方法,为什么还必须要实现该接口呢?
这就是标志接口的意义,实现该接口,才能进行clone操作,因为JVM在clone对象时会检查该对象是否实现Cloneable接口,如果没有实现则会报CloneNotSupportedException异常。类似的接口还有Serializable接口,RandomAccess接口等。
而拷贝也分深拷贝和浅拷贝
new:
jvm对new操作也有优化,轻量级对象使用new的速度回比clone快,但是复杂的对象,如在构造函数里面有复杂操作的,clone更快一点。