1.Cloneable 的用途
implements Cloneable表示该对象能被克隆,能使用Object.clone()方法。
如果没有implements Cloneable的类调用Object.clone()方法就会抛出CloneNotSupportedException.
2.克隆的分类
(1)浅克隆(shallow clone),浅拷贝是指拷贝对象时仅仅拷贝对象本身和对象中的基本变量,而不拷贝对象包含的引用指向的对象。
(2)深克隆(deep clone),深拷贝不仅拷贝对象本身,而且拷贝对象包含的引用指向的所有对象。
浅克隆
/* 浅复制 */
public Object clone() throws CloneNotSupportedException {
User user= (User) super.clone();
return user;
}
深克隆
采用流的形式读入当前对象的二进制输入,再写出二进制数据对应的对象。
/* 深复制 */
public Object deepClone() throws IOException, ClassNotFoundException {
/* 写入当前对象的二进制流 */
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(this);
/* 读出二进制流产生的新对象 */
ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bis);
return ois.readObject();
}