目录
1.简介
用原型实例指定创建对象的种类,并且通过拷贝这些这些原型创建新的对象。其核心在于clone方法,通过该方法可以进行对象的拷贝。且于final关键字冲突。
2.优点
由于clone方法是在内存二进制流的拷贝,相比直接new出来性能更高,尤其是需要在循环体内产生大量对象时非常适用。
3.缺点
由于是在内存中拷贝,所以构造函数是不会被执行的。
4.形式
一般形式,只涉及到对象或者原始类型,如int,char等
public class Prototype implements Cloneable {
@Override
public Prototype clone() {
Prototype prototype = null;
try{
prototype = (Prototype) super.clone();
}catch(CloneNotSupportedException e) {
e.printStackTrace();
System.out.println("异常处理");
}
}
}
浅拷贝,由于Object类提供的clone方法只是拷贝本对象,而对其对象内部的数组,引用对象不会被拷贝,还是指向原生对象内部的元素地址。这样造成的结果就是可能拷贝过来的对象将会共享私有变量。
public class Prototype implements Cloneable {
private ArrayList<String> arrayList = new ArrayList<String>();
@Override
public Prototype clone() {
Prototype prototype = null;
try {
prototype = (Prototype)super.clone();
}catch(CloneNotSupportedException e) {
e.printStackTrace();
System.out.println("异常处理");
}
return prototype;
}
}
深拷贝相比浅拷贝的区别就在于,它同时会拷贝对象内部的数组和引用对象,这样两个对象之间将相互不会产生影响。
public class Prototype implements Cloneable {
private ArrayList<String> arrayList = new ArrayList<String>();
@Override
public Prototype clone() {
Prototype prototype = null;
try {
prototype = (Prototype)super.clone();
prototype.arrayList = (ArrayList<String>)this.arrayList.clone();
}catch(CloneNotSupportedException e) {
e.printStackTrace();
System.out.println("异常处理");
}
return prototype;
}
}