`
郑云飞
  • 浏览: 795206 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

对象的克隆

阅读更多
package Cloneable;
class Student implements Cloneable
{
	String name;
	int age;
	Father f;
	int[] a = {1,2,3};
	Book[] books;
	Student(String name,int age,Father f,Book[] books)
	{
		this.name = name;
		this.age = age;
		this.f = f;
		this.books = books;
	}
	public String toString()
	{
		String book = "";
		for(Book b:books)
		{
			book+=b;
		}
		return "名字:"+name+" 年龄:"+age+" "+f+" "+book;
	}
	public Student clone() throws CloneNotSupportedException
	{
		Student s = (Student)super.clone();
		s.f = this.f.clone();
		s.a = this.a.clone();
		s.books = this.books.clone();//克隆数组的引用
		for(int i=0;i<books.length;i++)//克隆数组里面具体的内容
		{
			s.books[i] = this.books[i].clone();
		}
		return s;
	}
};
class Father implements Cloneable
{
	int age;
	String name;
	Father(String name,int age)
	{
		this.name = name;
		this.age = age;
	}
	public String toString()
	{
		return "父亲名:"+name+" 父亲年龄:"+age;
	}
	public Father clone() throws CloneNotSupportedException
	{
		return (Father)super.clone();
	}
};
class Book implements Cloneable
{
	String name;
	Book(String name)
	{
		this.name = name;
	}
	public String toString()
	{
		return "书名:"+name;
	}
	public Book clone() throws CloneNotSupportedException
	{
		return (Book)super.clone();
	}
};
class CloneTest
{
	public static void main(String[] args) throws CloneNotSupportedException
	{
		Father f = new Father("liyi",45);
		Book[] books = {new Book("java"),new Book("C语言"),new Book("web-1")};
		Student s1 = new Student("lili",25,f,books);
		Student s2 = s1.clone();
		System.out.println(s1);
		System.out.println(s2);
		System.out.println(s1==s2);
		s1.name = "lucy";
		System.out.println(s1);
		System.out.println(s2);
		s1.f.name = "Micro";
		System.out.println(s1);
		System.out.println(s2);
		s1.a[2] = 100;
		System.out.println(s2.a[2]);
		System.out.println(s1.books==s2.books);
		s1.books[0].name = "神雕侠侣";
		System.out.println(s1);
		System.out.println(s2);
	}
};

 

package clone;
class Students2 implements Cloneable//实现Cloneable接口表示可以被克隆
{
	String name;
	int age;
	int []a={1,2,3,4,5};
	Father f=new Father("java",80);
	Students2(String name,int age)
	{
		this.name=name;
		this.age=age;
	}
	public Students2 clone()throws CloneNotSupportedException
	{
		return (Students2) super.clone();//具体的克隆操作由父类来完成
	}
	public String toString()//重写toString()方法
	{
		return "姓名:"+name+"年龄:"+age;
	}
}
class Father implements Cloneable//实现Cloneable接口表示可以被克隆
{
 String name;
 int age;
 Father(String name,int age)
 {
	 this.name=name;
	 this.age=age;
 }
 public Father clone()throws CloneNotSupportedException
	{
		return (Father) super.clone();
	}
 public String toString()
 {
   return "姓名:"+name+"年龄:"+age;
 }
	
}
class StudentTest1 
{
	public static void main(String[] args) throws CloneNotSupportedException 
	{
		Students2 s1=new Students2("lili",25);
		Students2 s2=s1.clone();
		System.out.println("对象的克隆:");
		System.out.println(s1);
		System.out.println(s2);
		int []b=s1.a.clone();
		System.out.println("数组的克隆:");
		System.out.println("原始的数组:");
		for(int i:s1.a)
		{
			System.out.print(i+" ");
		}
		System.out.println("\n克隆后的数组:");
		for(int i:b)
		{
			System.out.print(i+" ");
		}
      System.out.println("\n类的克隆:");
      System.out.println("原始对象:");
      System.out.println(s1.f);
      Father ff=s1.f.clone();
      System.out.println("克隆后的对象:");
      System.out.println(ff);
	  System.out.println("克隆后重新为原对象赋值,看看克隆的对象与被克隆的对象的值是否发生改变:");
	  for(int i=0;i<s1.a.length;i++)
		{
		  s1.a[i]=5-i;
		}
		System.out.println("\n重新为a赋值后,a数组的内容变为:");
		for(int i:s1.a)
		{
			System.out.print(i+" ");
		}
		System.out.println("\n但是b克隆a的内容还是:");
		for(int i:b)
		{
			System.out.print(i+" ");
		}
		System.out.println("\n重新为Fathe f赋值后,f的内容变为:");
		s1.f=new Father("Java SE",100);
		System.out.println(s1.f);
		System.out.println("为F赋值后,但是克隆f的对象ff的内容还是:");
		System.out.println(ff);

	}

}

 

分享到:
评论

相关推荐

    对象克隆技术笔记

    031111_【第11章:Java常用类库】_对象克隆技术笔记

    clone()方法示例(对象克隆)_对象克隆_nervouse78_源码

    clone()方法示例(对象克隆)。作者: 初生不惑

    JAVA_对象克隆

    一个详细讲解JAVA_对象克隆的例子 希望可以帮助到你。

    对象克隆、复制工具

    对象复制工具,基于cglib BeanCopier 实现对实体对象、持久化对象、代理对象的克隆和复制, 避免重复克隆和复制,避免无限循环引用,(校验hashCode) 可指定实体对象和集合属性的克隆深度

    计算机前端-核心编程.视频07对象克隆.avi

    计算机前端-核心编程.视频07对象克隆.avi

    Java编程实现对象克隆(复制)代码详解

    主要介绍了Java编程实现对象克隆(复制)代码详解,涉及了克隆的原因,如何实现克隆,克隆的一般步骤,深克隆与浅克隆的介绍等相关内容,具有一定借鉴价值,需要的朋友可以参考下。

    Java对象的复制克隆

    Java对象的复制与克隆,包含浅复制和深层复制。 免费下载啦,绝对值得一看。

    java克隆对象(两种方法)

    java的两种深度克隆方法,1cloneTest是用Cloneable接口的clone方法实现(对象必须要实现cloneable接口).2cloneSerialize.java是用对象流写对象到byte数组中,然后从byte数组中取得对象.(对象必须要实现serializble接口)

    java 对象克隆

    对象的克隆操作过程,展示了对象中数据字段是如何是实现克隆的

    PHP面向对象程序设计之对象克隆clone和魔术方法__clone()用法分析

    1.对象克隆 clone PHP4面向对象功能一个很大的缺点,是将对象视为另一种数据类型,这使得很多常见的OOP方法无法使用,如设计模式。这些方法依赖于将对象作为引用传递给其他类方法,而不是作为值传递,而按值传递却是...

    对象克隆(clone)详解.docx

    查看了很多文章对于clone()方法讲解都不慎透彻,特别是对于深层克隆的讲解语言晦涩难懂,很难理解,包括Oracle公司出版的JDK帮助文档也讲的不清楚,本人通过具体实践通过浅显易懂的语言详细讲解了clone()方法。...

    PHP对象克隆clone用法示例

    本文实例讲述了PHP对象克隆clone用法。分享给大家供大家参考,具体如下: 浅克隆:只是克隆对象中的非对象非资源数据,即对象中属性存储的是对象类型,则会出现克隆不完全 &lt;?php class B{ public $val = 10; } ...

    php实现对象克隆的方法

    主要介绍了php实现对象克隆的方法,实例分析了php对象实例化与克隆的使用技巧,需要的朋友可以参考下

    java 深克隆浅克隆

    java 深克隆浅克隆···············

    js-object-clone:深度克隆并与ES5属性描述符和对象可扩展性支持进行比较

    对象克隆ES5的深克隆和比较概要// just for conveniencevar log = function ( ) { console . log . apply ( console , [ ] . slice . call ( arguments ) ) } ; var src = { name : 'dankogai' , lang : [ 'perl' ] ...

    php5 类与对象

    php5 类与对象 个人总结与简单的例子,... PHP 对象克隆 clone 关键字与 __clone() 方法 17. PHP 对象的存储与传输(序列化 serialize 对象) 18. php 设计模式:工厂模式和单例模式 19.对象对象迭代 20 this关键字

Global site tag (gtag.js) - Google Analytics