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()方法示例(对象克隆)。作者: 初生不惑
一个详细讲解JAVA_对象克隆的例子 希望可以帮助到你。
对象复制工具,基于cglib BeanCopier 实现对实体对象、持久化对象、代理对象的克隆和复制, 避免重复克隆和复制,避免无限循环引用,(校验hashCode) 可指定实体对象和集合属性的克隆深度
计算机前端-核心编程.视频07对象克隆.avi
主要介绍了Java编程实现对象克隆(复制)代码详解,涉及了克隆的原因,如何实现克隆,克隆的一般步骤,深克隆与浅克隆的介绍等相关内容,具有一定借鉴价值,需要的朋友可以参考下。
Java对象的复制与克隆,包含浅复制和深层复制。 免费下载啦,绝对值得一看。
java的两种深度克隆方法,1cloneTest是用Cloneable接口的clone方法实现(对象必须要实现cloneable接口).2cloneSerialize.java是用对象流写对象到byte数组中,然后从byte数组中取得对象.(对象必须要实现serializble接口)
对象的克隆操作过程,展示了对象中数据字段是如何是实现克隆的
1.对象克隆 clone PHP4面向对象功能一个很大的缺点,是将对象视为另一种数据类型,这使得很多常见的OOP方法无法使用,如设计模式。这些方法依赖于将对象作为引用传递给其他类方法,而不是作为值传递,而按值传递却是...
查看了很多文章对于clone()方法讲解都不慎透彻,特别是对于深层克隆的讲解语言晦涩难懂,很难理解,包括Oracle公司出版的JDK帮助文档也讲的不清楚,本人通过具体实践通过浅显易懂的语言详细讲解了clone()方法。...
本文实例讲述了PHP对象克隆clone用法。分享给大家供大家参考,具体如下: 浅克隆:只是克隆对象中的非对象非资源数据,即对象中属性存储的是对象类型,则会出现克隆不完全 <?php class B{ public $val = 10; } ...
主要介绍了php实现对象克隆的方法,实例分析了php对象实例化与克隆的使用技巧,需要的朋友可以参考下
java 深克隆浅克隆···············
对象克隆ES5的深克隆和比较概要// just for conveniencevar log = function ( ) { console . log . apply ( console , [ ] . slice . call ( arguments ) ) } ; var src = { name : 'dankogai' , lang : [ 'perl' ] ...
php5 类与对象 个人总结与简单的例子,... PHP 对象克隆 clone 关键字与 __clone() 方法 17. PHP 对象的存储与传输(序列化 serialize 对象) 18. php 设计模式:工厂模式和单例模式 19.对象对象迭代 20 this关键字