一个<<corejava>>的例子
---------------------------
import java.util.*;public class CloneTest
{  
   public static void main(String[] args)
   {  
      Employee original = new Employee("John Q. Public", 50000); 
      original.setPayDay(2000, 1, 1);
      Employee copy = (Employee)original.clone();
      copy.raiseSalary(10);
      copy.addPayDay(14);
      System.out.println("original=" + original);
      System.out.println("copy=" + copy);
   }
}class Employee implements Cloneable
{  
   public Employee(String n, double s)
   {  
      name = n;
      salary = s;
   }   public Object clone()
   {
      try
      {
         // call Object.clone()
         Employee cloned = (Employee)super.clone();          // clone mutable fields
         cloned.payDay = (GregorianCalendar)payDay.clone();
         
         return cloned;
      }
      catch (CloneNotSupportedException e) { return null; }
   }   public void setPayDay(int year, int month, int day)
   {
      payDay = new GregorianCalendar(year, month - 1, day);
   }   public void addPayDay(int days)
   {
      payDay.add(Calendar.DAY_OF_MONTH, days);
   }   public Date getPayDay()
   {
      return payDay.getTime();
   }   public void raiseSalary(double byPercent)
   {  
      double raise = salary * byPercent / 100;
      salary += raise;
   }   public String toString()
   {
      return "Employee[name=" + name
         + ",salary=" + salary
         + ",payDay=" + getPayDay()
         + "]";
   }   private String name;
   private double salary;
   private GregorianCalendar payDay;
}

解决方案 »

  1.   

    实现克隆接口,调用super.clone()方法。根据自己的需要凡是有对象句柄的地方都要层层克隆实现下去
      

  2.   

    clone的原理其实是生成一个和原有对象一模一样的对象
    因此如果要不使用java的cloneable接口而自己实现一个clone方法
    需要调用要clone类的构造函数,先生成一个对象
    然后根据被clone对象的当前属性值,把这些属性值赋给新生成的那个对象
    这样就得到了一个和原有对象一模一样的新对象
    如果这个被clone对象里含有其他对象的引用,同样需要调用这些对象的构造函数,直到所有的对象都调用了自己的构造函数并赋了被clone对象的初值
      

  3.   

    如 fft123(专杀各类日本畜生)  所说所谓 clone 就是复制自己的所有 属性值
      

  4.   

    呵呵 我己经写出来了 ,谢谢各位了
    实际上 我并不是想问如何实现那个接口,我是想问虚拟机内部的 是怎么实现的 嘿嘿.
    http://www.blueidea.com/bbs/NewsDetail.asp?id=1261679
    看 我在脚本中实现的. :).
      

  5.   

    可以看java的clone的源代码啊,要自己实现的话要实现深拷贝。
      

  6.   

    clone 的源码 不是由类库实现的 它是native的 看不到源码 .