一直以来,都是只知道java有这么个东西,就是在实际应用中没有使用过。写了个小东西 再次掌握一下Clone,包括基本数据类型的Clone和非基本类型的深层Clone.
//Class A 简单数据类型拷贝.
class A implements java.lang.Cloneable
{
int iCount;
String data;
public A()
{
}
public void set(int icount,String str)
{
iCount=icount;
data=str;
}
public void print()
{
System.out.println(iCount+" String data:"+data);
}
public Object clone()
{
try
{
Object o=super.clone();
return o;
}catch(Exception ex)
{
ex.printStackTrace();
}
return null;
}
}
//Class B 带Vector 的深层拷贝
class B implements Cloneable
{
String sData;
Vector vData;
public B()
{
sData=new String("Class B");
vData=new Vector(3);
vData.add(null);
vData.add(null);
vData.add(null);
}
public void setVectorData(String str)
{
for(int i=0;i<3;i++)
{
vData.set(i,str);
}
}
public void print()
{
System.out.println("----------------------------");
System.out.println("Class name:"+ sData);
for (int i = 0; i < vData.size(); i++) {
System.out.println((String)vData.elementAt(i));
}
System.out.println("----------------------------");
}
public Object clone()
{
Object o=null;
B b=null;
try
{
Vector v=new Vector();
for(int i=0;i<vData.size();i++)
{
v.add(vData.elementAt(i));
}
o=super.clone();
b=(B)o;
b.vData=v;
}catch(Exception ex)
{
ex.printStackTrace();
}
return b;
}
}
//Class C 内部元素是类的深层拷贝,与B 原理一致只是加深理解.哈哈
class C implements Cloneable
{
A a;
B b;
public C()
{
}
public void set(A a1,B b1)
{
a=a1;
b=b1;
}
public void print()
{
System.out.println("****** print Class c'data **********");
a.print();
b.print();
}
public Object clone()
{
Object o = null;
try {
o = super.clone();
A clonedA=(A)a.clone();
B clonedB=(B)b.clone();
C c=(C)o;
c.a=clonedA;
c.b=clonedB;
}
catch (Exception ex) {
ex.printStackTrace();
}
return o;
}
//测试用类
package testclone;
import java.util.Vector;
/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2007</p>
* <p>Company: </p>
* @author 阿笨
* @version 1.0
*/
public class mainApp {
public mainApp() {
}
public static void main(String[] args)
{
//以下为测试 类A 和B 拷贝成功与否
A a=new A();
a.set(10,"Hello");
A b=a;
a.print();
b.print();
A c=(A)a.clone();
b.set(20,"World");
c.set(30,"Clone Class");
a.print();
b.print();
c.print();
B b1=new B();
B b2;
B b3;
b2=b1;
b1.print();
b2.print();
b2.setVectorData("SSSS");
b1.print();
b2.print();
b3=(B)b1.clone();
System.out.println("Clone data");
b3.sData="Class B Cloned";
b3.print();
System.out.println("Change Data in Vector! ");
b2.setVectorData("DDDDD");
b1.print();
b2.print();
b3.print();
//以下为测试C 成功与否的代码
// A a=new A();
// a.set(10,"Hello");
// B b=new B();
// b.setVectorData("BBBBBBBB");
//
// C c1=new C();
// c1.set(a,b);
//
// C c2=(C)c1.clone();
// c1.print();
// c2.print();
//
// b.setVectorData("CCCCCCCCC");
// c1.print();
// c2.print();
}
}
}
哈哈....
Source Code 就是如此了.
不知道有没有问题.等读者纠正吧!