`
郑云飞
  • 浏览: 818323 次
  • 性别: 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);

	}

}

 

分享到:
评论

相关推荐

    JAVA_对象克隆

    在Java编程语言中,对象克隆是一种创建与现有对象具有相同数据的新对象的过程。这个过程在需要复制对象的所有属性而不创建新类型实例时非常有用。本文将深入探讨Java中的对象克隆,包括其原理、实现方式以及注意事项...

    对象克隆技术笔记

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

    对象克隆(clone)详解.docx

    【对象克隆(clone)详解】 对象克隆是Java编程中的一个重要概念,它允许我们创建一个已有对象的副本,而不影响原始对象。在Java中,克隆主要涉及到`Object`类中的`clone()`方法,以及两种不同的克隆类型:浅克隆和...

    java 对象克隆

    在Java编程语言中,对象克隆是一种创建一个与原对象具有相同数据的新对象的过程。对象克隆主要用于复制或备份对象,以便在不干扰原始对象的情况下对其进行修改或操作。本篇文章将详细探讨Java中的对象克隆及其实现...

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

    Java编程实现对象克隆(复制)代码详解 在 Java 编程中,对象克隆是一种非常重要的技术,它允许开发者创建一个对象的副本,具有相同的属性和行为。对象克隆可以分为浅克隆和深克隆,浅克隆仅复制对象的引用,而深...

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

    1. **实现Cloneable接口**:`Cloneable`接口在Java中是一个标记接口,表示该类的对象可以被克隆。虽然它没有定义任何方法,但实现这个接口是调用`clone()`的前提。 2. **重写`clone()`方法**:默认的`clone()`方法...

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

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

    对象克隆、复制工具

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

    Java对象的复制克隆

    Java中的对象复制与克隆是程序开发中常见的需求,主要用于创建一个对象的副本,而不会影响原始对象的状态。这里主要讨论两种类型的对象拷贝:浅拷贝和深拷贝。 浅拷贝,也称为表面拷贝,是创建一个新的对象,然后将...

    如何进行Java对象的克隆.pdf

    "Java 对象克隆详解" Java 对象克隆是 Java 编程中一个重要的概念。由于 Java 中的对象使用引用类型,所以没有直接的方法可以将对象的内容复制到一个新的对象。Java 提供了一个特殊的 clone() 方法,为所有的引用...

    php实现对象克隆的方法

    PHP实现对象克隆的知识点主要涉及对象的深拷贝与浅拷贝的概念、PHP对象克隆的语法以及__clone魔术方法的使用。以下为详细知识点: 1. 对象克隆基本概念: 对象克隆,是面向对象编程中的一项技术,用于创建一个与...

    PHP对象克隆clone用法示例

    对象克隆通常用于需要复制对象属性或方法的状态时,以保证原始对象的独立性。在PHP中,对象的克隆可以通过使用`clone`关键字实现,而PHP的对象克隆分为浅克隆和深克隆两种。 浅克隆只是复制对象中的非对象和非资源...

    java克隆对象(两种方法)

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

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

    在讨论对象克隆时,还需要提到魔术方法`__clone()`,它在对象被克隆时自动调用,允许我们在克隆过程中对新对象进行自定义初始化。 1. **对象克隆**: 当使用`clone`关键字时,PHP会创建一个现有对象的新实例,这个...

    java 深克隆浅克隆

    在Java编程语言中,克隆是一种创建对象副本的方法,它允许我们复制一个对象并拥有一个完全独立的新实例,而不是仅仅引用原始对象。克隆技术在处理复杂数据结构、避免对象共享以及实现对象复制等方面有着广泛的应用。...

    (源码下载)jdk6.0从入门到精通-----chapter2--输入输出,克隆对象

    标题 "(源码下载)jdk6.0从入门到精通-----chapter2--输入输出,克隆对象" 提供了我们要探讨的主题,即Java中的输入输出流(I/O Stream)和对象克隆。在这个章节中,我们将深入理解这两个关键概念。 **输入输出流...

    clone 深度克隆对象

    深度克隆,也称为完全克隆,是一种创建新对象的技术,这个新对象不仅包含原始对象的所有属性值,还包含了嵌套对象的完整副本。这意味着如果一个对象中包含了其他对象的引用,深度克隆会创建这些引用对象的独立副本,...

Global site tag (gtag.js) - Google Analytics