<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-159  評論-114  文章-7  trackbacks-0

    某個類要想實現拷貝的功能,就必須實現Cloneable接口,并覆蓋Object的clone()方法,才能真正實現克隆。

    淺拷貝,一種默認的實現,Teacher類中的clone方法的實現就是淺拷貝。

    Student類的clone方法就是深拷貝。注意super.clone返回的對象實際上是被類的對象,可以放心強制轉換,至于為什么,我也不知道,估計得讀虛擬機規范,從Object源碼看也不到什么,因為是protect native Object clone();


    import java.util.*;
    public class TestClone{
     
    public static void main(String[] args)
     
    {
      Teacher t 
    = new Teacher("Name",22);
      Teacher m 
    = (Teacher)t.clone();
      System.out.println(m);
      
      Student stu 
    = new Student();
      Student deepcloneSTU 
    = (Student)stu.clone();
      stu.courses.put(
    new Integer(1),"Math");
      deepcloneSTU.courses.put(
    new Integer(100),"Java");
      disp(stu.courses);
      disp(deepcloneSTU.courses);
      
     }

     
     
    static void disp(HashMap h)
     
    {
      Set keySet 
    = h.keySet();
      Iterator it 
    = keySet.iterator();
      
    while(it.hasNext())
      
    {
       System.out.println(h.get(it.next()));
      }

     }

    }


    class Teacher implements Cloneable{
     String name;
     
    int age;
     Teacher(String name,
    int age)
     
    {
      
    this.name = name;
      
    this.age = age;
     }

     
     
    public Object clone()
     
    {
      
    try{
       
    return super.clone();
      }
    catch(CloneNotSupportedException e)
      
    {
       
    throw new Error("This should never happen!"); 
      }

     }

     
     
    public String toString()
     
    {
      
    return name + "  " + age;
     }

    }


    class Student implements Cloneable{
     HashMap courses 
    = new HashMap();
     Student()
    {} 
     
     
    public Object clone()
     
    {
      
    try{
       Student stu 
    = (Student)super.clone();
       stu.courses 
    = (HashMap)courses.clone();
       
    return stu;
      }
    catch(CloneNotSupportedException e)
      
    {
       
    throw new Error("This should never happen!"); 
      }

     }

    }




    如何通過對象串行化的方式來做進行拷貝工作呢?

    import java.util.*;
    import java.io.*;
    public class TestClone{
        
    public static void main(String[] args) throws Exception
        
    {
            BMW mycar 
    = new BMW();
            ByteArrayOutputStream memoryOutputStream 
    = new ByteArrayOutputStream();
            ObjectOutputStream serializer 
    = new ObjectOutputStream(memoryOutputStream);
            serializer.writeObject(mycar);
            serializer.flush();
            
            ByteArrayInputStream memoryInputStream 
    = new ByteArrayInputStream(memoryOutputStream.toByteArray( ));
            ObjectInputStream deserializer 
    = new ObjectInputStream(memoryInputStream);
            BMW mycopycar 
    = (BMW)deserializer.readObject();

            mycar.add(
    new String("NB"));
            mycopycar.add(
    new String("NBNB"));
          System.out.println(mycar.hashCode());
          System.out.println(mycopycar.hashCode());
          System.out.println(mycar.equals(mycopycar));
        }

    }


    class BMW implements Serializable
    {
        
    private int wheels;
      
    private String model;
      
    private ArrayList forTest;
      
      BMW()
      
    {
          wheels 
    = 4;
          model 
    = "530i";
          forTest 
    = new ArrayList();
      }

      
      
    public void add(Object o)
      
    {
          forTest.add(o);
      }

      
      
    public String toString()
      
    {
          
    return "WHEEL:" + wheels + "MODEL:" + model + forTest.toString();    
      }

      
      
    public int hashCode()
      
    {
          
    return wheels + model.hashCode() + forTest.hashCode();    
      }

      
      
    public boolean equals(Object o)
      
    {
          
    if(o == this)
              
    return true;
          
    if(o == null)
              
    return false;
          
    if(!(o instanceof BMW))
            
    return false;
          BMW bmw 
    = (BMW)o;
          
    if(bmw.wheels == wheels&&bmw.model.equals(model)&&bmw.forTest.equals(forTest))
              
    return true;
          
    else return false;
      }
      
    }


    記住,如果覆蓋了equals方法,應該也覆蓋hashCode(),因為如果兩個對象相等也就是equals()返回true,那么這兩個對象應該有相同的hashCode。



    posted on 2006-01-08 17:15 北國狼人的BloG 閱讀(3604) 評論(0)  編輯  收藏 所屬分類: 達內學習總結
    主站蜘蛛池模板: 曰批全过程免费视频网址 | 亚洲性猛交xx乱| 你是我的城池营垒免费看 | 久久精品女人天堂AV免费观看| 欧洲亚洲国产清在高| 精品国产污污免费网站入口| 亚洲精品国产日韩无码AV永久免费网 | 国产国拍亚洲精品mv在线观看| av网站免费线看| 亚洲精品一品区二品区三品区| 国产免费播放一区二区| 亚洲色中文字幕无码AV| 免费人成黄页在线观看日本| 久久精品国产亚洲AV麻豆不卡| 无码AV片在线观看免费| 亚洲人成黄网在线观看| 嫖丰满老熟妇AAAA片免费看| 亚洲一区二区影视| 女人18毛片a级毛片免费| 日韩亚洲人成网站| 男人的天堂亚洲一区二区三区 | 亚洲国产精品日韩av不卡在线| 日韩在线a视频免费播放| 四虎影视永久在线精品免费| 中文字幕日韩亚洲| 免费国产黄网站在线观看可以下载| 亚洲不卡视频在线观看| 国产免费资源高清小视频在线观看| 色爽黄1000部免费软件下载| 亚洲AV成人精品网站在线播放| 久草在视频免费福利| 国产精品久久亚洲一区二区| 精品亚洲一区二区| 久久久久国色AV免费看图片| 污网站在线观看免费| 国产成A人亚洲精V品无码| 18级成人毛片免费观看| 国产亚洲综合视频| 久久亚洲AV成人出白浆无码国产| 最近中文字幕免费mv视频8| 一级白嫩美女毛片免费|