一、基本克隆
package za;
public class CloneExample {
private int a;
private int b;
@Override
public CloneExample clone() throws CloneNotSupportedException{
return (CloneExample)super.clone();
}
public static void main(String[] args) {
CloneExample e1 = new CloneExample();
try{
CloneExample e2 = e1.clone();
}catch (CloneNotSupportedException e){
e.printStackTrace();
}
}
}
二、浅拷贝
package za;
public class ShallowCloneExample implements Cloneable{
private int[] a;
public ShallowCloneExample(){
a = new int[15];
for (int i = 0; i < a.length; i++) {
a[i]=i;
}
}
public void set(int index,int value){
a[index]=value;
}
public int get(int index){
return a[index];
}
@Override
protected ShallowCloneExample clone() throws CloneNotSupportedException{
return (ShallowCloneExample)super.clone();
}
public static void main(String[] args) {
ShallowCloneExample e1 = new ShallowCloneExample();
ShallowCloneExample e2 = null;
try {
e2 = e1.clone();
}catch (CloneNotSupportedException e){
e.printStackTrace();
}
e1.set(2,1230);
System.out.println(e2.get(2));//1230
}
}
三、深拷贝
package za;
public class DeepCloneExample implements Cloneable{
private int[] a;
public DeepCloneExample(){
a = new int[15];
for (int i = 0; i < a.length; i++) {
a[i]=i;
}
}
public void set(int index,int value){
a[index]=value;
}
public int get(int index){
return a[index];
}
@Override
protected DeepCloneExample clone() throws CloneNotSupportedException{
DeepCloneExample result = (DeepCloneExample)super.clone();
result.a = new int[a.length];
for (int i = 0; i < a.length; i++) {
result.a[i] = a[i]+1;
}
return result;
}
public static void main(String[] args) {
DeepCloneExample e1 = new DeepCloneExample();
DeepCloneExample e2 = null;
try {
e2 = e1.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
e1.set(2, 222);
System.out.println(e2.get(2)); // 2+1
}
}
四、 clone() 的替代方案
package za;
public class CloneConstructorExample {
private int[] a;
public CloneConstructorExample(){
a = new int[15];
for (int i = 0; i < a.length; i++) {
a[i]=i;
}
}
public CloneConstructorExample(CloneConstructorExample ce){
a = new int[ce.a.length];
for (int i = 0; i < ce.a.length; i++) {
a[i]=ce.a[i];
}
}
public void set(int index,int value){
a[index]=value;
}
public int get(int index){
return a[index];
}
public static void main(String[] args) {
CloneConstructorExample e1 = new CloneConstructorExample();
CloneConstructorExample e2 = new CloneConstructorExample(e1);
e1.set(2, 222);
System.out.println(e2.get(2)); // 2
}
}