java克隆(Clone)

          一直以来,都是只知道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 就是如此了.

不知道有没有问题.等读者纠正吧!

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中的`clone()`方法用于创建并返回一个对象的拷贝,这个拷贝具有与原始对象相同的状态和属性。要使用`clone()`方法,需要确保被克隆的对象实现了`Cloneable`接口。 下面是使用`clone()`方法进行对象克隆的示例代码: ```java class Person implements Cloneable { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } // 重写clone()方法 @Override protected Object clone() throws CloneNotSupportedException { return super.clone(); } public String getName() { return name; } public int getAge() { return age; } } public class Main { public static void main(String[] args) { Person person1 = new Person("Alice", 25); try { // 克隆person1对象 Person person2 = (Person) person1.clone(); System.out.println("person1: " + person1.getName() + ", " + person1.getAge()); System.out.println("person2: " + person2.getName() + ", " + person2.getAge()); } catch (CloneNotSupportedException e) { e.printStackTrace(); } } } ``` 输出结果为: ``` person1: Alice, 25 person2: Alice, 25 ``` 在上述示例中,`Person`实现了`Cloneable`接口并重写了`clone()`方法。在`main`方法中,通过调用`person1.clone()`创建了一个新的对象`person2`,并且`person1`和`person2`的属性值相同。 需要注意的是,`clone()`方法是浅拷贝,即只会复制对象的字段值,而不会复制对象引用的其他对象。如果需要进行深拷贝,需要自行实现相关逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值