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

导航

<2008年8月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
31123456

常用链接

留言簿(2)

随笔分类

随笔档案

我的友情链接

  • 平板电脑什么牌子好
  • 平板电脑小八义成立于2011年9月,致力于推荐便宜又好的平板电脑,让对平板电脑有需求的用户花最少的钱,买到最合适的平板电脑。以台电、昂达、原道、蓝魔为代表国产平板系,以良好的性价比、低廉的价格、不错的性能在市场上有很好的表现。平板电脑小八义网站以台电、蓝魔等八个品牌的产品介绍、推荐、评价,辐射更多便宜又好的平板电脑,以求让用户买到物美价廉并能满足自己需要的平板产品。无论现在还是未来,平板电脑小八义都将与市场共同成长,一如既往地为用户服务,做出优秀的推荐。

搜索

  •  

最新评论

阅读排行榜

评论排行榜

java基础:关于clone

Posted on 2008-08-02 07:16 梦与桥 阅读(178) 评论(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违例,指出我们不能克隆它。