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

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

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

    posts - 37, comments - 8, trackbacks - 0, articles - 0

    java基礎:關于clone

    Posted on 2008-08-02 07:16 夢與橋 閱讀(180) 評論(0)  編輯  收藏 所屬分類: java基礎

    1、目的:為了獲得對象的一份拷貝。
    2、一般步驟:§在派生類中覆蓋基類(object)的clone方法,并聲明為public
                              §在派生類的克隆方法中調用super.clone()
                              §在派生類中實現Cloneable接口

    3、分類:淺拷貝、深拷貝
                        §淺拷貝僅僅拷貝所考慮的對象,而不拷貝它所引用的對象
                        §深拷貝把要拷貝的對象所引用的對象都拷貝了一遍
    4、淺拷貝實例:

    class Book implements Cloneable
    {
     private String name;
     private double price;
     public Author author;

     Book(String name,double price,Author author)
     {
      this.name=name;
      this.price=price;
      this.author=author;
     }
     public String toString()
     {
      return "book's name:"+name+"\t\tbook's price:"+price+author.tostring();
     }
     public Object clone()
     {
      Object o=null;
      try
      {
       o=super.clone();
      }
      catch (CloneNotSupportedException e)
      {
       System.out.println(e.toString());
      }
      return o;
     }
    }
    class Author
    {
     private String name;
     private int age;
     Author(String name,int age)
     {
      this.name=name;
      this.age=age;
     }
     public void set(String name,int age)
     {
      this.name=name;
      this.age=age;
     }
     public String tostring()
     {
      return "\nauthor's name:"+name+"\t\tauthor's age"+age;
     }
    }
    public class Test
    {
     public static void main(String args[])
     {
      Author author=new Author("孫悟空",800);
      Book book1=new Book("高等數學",32.00,author);
      Book book2=(Book)book1.clone();
      book1.author.set("唐僧",700);//此處的修改影響到了book2,體現了淺拷貝的特點
      System.out.println(book2);
     }
    }

    5、深拷貝實例:

    class Book implements Cloneable
    {
     private String name;
     private double price;
     public Author author;

     Book(String name,double price,Author author)
     {
      this.name=name;
      this.price=price;
      this.author=author;
     }
     public String toString()
     {
      return "book's name:"+name+"\t\tbook's price:"+price+author.tostring();
     }
     public Object clone()
     {
      Book o=null;
      try
      {
       o=(Book)super.clone();
      }
      catch (CloneNotSupportedException e)
      {
       System.out.println(e.toString());
      }
      o.author=(Author)author.clone();
      return o;
     }
    }
    class Author implements Cloneable
    {
     private String name;
     private int age;
     Author(String name,int age)
     {
      this.name=name;
      this.age=age;
     }
     public void set(String name,int age)
     {
      this.name=name;
      this.age=age;
     }
     public String tostring()
     {
      return "\nauthor's name:"+name+"\t\tauthor's age"+age;
     }
      public Object clone()
     {
      Object o=null;
      try
      {
       o=super.clone();
      }
      catch (CloneNotSupportedException e)
      {
       System.out.println(e.toString());
      }
      return o;
     }
    }
    public class Test
    {
     public static void main(String args[])
     {
      Author author=new Author("孫悟空",800);
      Book book1=new Book("高等數學",32.00,author);
      Book book2=(Book)book1.clone();
      book1.author.set("唐僧",700);//此處的修改沒有影響book2,體現了深拷貝的特點。
      System.out.println(book2);
     }
    }

    6、注意:
                §在派生類中覆蓋Object的clone()方法時,一定要調用super.clone(),因為在運行時刻,Object中的clone()識別出你要復制的是哪一個對象,然后為此對象分配空間,并進行對象的復制,將原始對象的內容一一復制到新對象的存儲空間中。
                §在Object.clone()正式開始操作前,首先會檢查一個類是否Cloneable,即是否具有克隆能力——換言之,它是否實現了Cloneable接口。若未實現,Object.clone()就擲出一個CloneNotSupportedException違例,指出我們不能克隆它。
    主站蜘蛛池模板: caoporm碰最新免费公开视频| 亚洲熟妇无码AV| 很黄很污的网站免费| MM131亚洲国产美女久久| 阿v视频免费在线观看| 精品国产香蕉伊思人在线在线亚洲一区二区| 国产精品日本亚洲777| 免费国产a国产片高清| 麻豆69堂免费视频| 国产福利电影一区二区三区,亚洲国模精品一区 | 国产情侣激情在线视频免费看| 亚洲视频精品在线观看| 国产精品怡红院永久免费| 亚洲另类古典武侠| 国内外成人免费视频| 黄色毛片免费观看| 亚洲毛片αv无线播放一区| 久久免费视频精品| 久久精品国产亚洲AV久| 国产传媒在线观看视频免费观看| 边摸边吃奶边做爽免费视频99 | 亚洲久热无码av中文字幕| 免费一级毛片在线观看| 99久久免费国产精精品| 亚洲网站免费观看| 永久免费毛片手机版在线看| 性生大片视频免费观看一级| 国产精品久久久亚洲| 69式国产真人免费视频| 免费高清A级毛片在线播放| 亚洲AV日韩AV永久无码绿巨人| 又黄又爽又成人免费视频| 免费亚洲视频在线观看| 老色鬼久久亚洲AV综合| 日韩精品无码人妻免费视频| 99久久免费国产精精品| 亚洲依依成人亚洲社区| 久久久久无码精品亚洲日韩 | 久草免费手机视频| 亚洲av成人中文无码专区| 国产亚洲成av人片在线观看|