<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

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

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

    Student類的clone方法就是深拷貝。注意super.clone返回的對象實際上是被類的對象,可以放心強制轉換,至于為什么,我也不知道,估計得讀虛擬機規(guī)范,從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)  編輯  收藏 所屬分類: 達內(nèi)學習總結
    主站蜘蛛池模板: 免费黄色毛片视频| 成人免费淫片在线费观看| 久久精品国产亚洲AV大全| 黄色成人免费网站| 亚洲Av永久无码精品黑人| 亚洲国产人成精品| 久久久久久毛片免费播放| 亚洲精品无码日韩国产不卡av| 亚洲精品成a人在线观看| 午夜视频免费在线观看| 亚洲欧美成人综合久久久| 亚洲区小说区图片区QVOD| 国产精品免费观看久久| 久久久久女教师免费一区| 亚洲免费电影网站| 久久亚洲精品无码播放| 国产v精品成人免费视频400条| 一级**爱片免费视频| 亚洲一级免费视频| 亚洲精品自在在线观看| 免费无码黄十八禁网站在线观看| 久久免费香蕉视频| 亚洲第一se情网站| 亚洲尹人九九大色香蕉网站| 伊人久久亚洲综合影院| 中文毛片无遮挡高潮免费| 中文字幕免费在线看电影大全| 亚洲熟妇丰满xxxxx| 久久精品国产99精品国产亚洲性色| 国产色爽女小说免费看| 99国产精品永久免费视频| 国产做国产爱免费视频| 国产成人人综合亚洲欧美丁香花| 亚洲精品在线电影| 亚洲AV午夜成人影院老师机影院| www.91亚洲| 免费乱码中文字幕网站| 成人免费一区二区三区在线观看| 99精品视频免费观看| 久久久久久久久久免免费精品| 爱情岛论坛亚洲品质自拍视频网站|