码迷,mamicode.com
首页 > 编程语言 > 详细

Java基础学习 —— 对象的克隆

时间:2017-09-13 14:01:55      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:如图所示   leo   isp   输出流   修改   实现   open   new   demo1   

对象的克隆分为对象的浅克隆和深克隆

一、对象的浅克隆

注意事项:

1.如果一个对象需要调用clone的方法克隆,那么该对象必须要实现Cloneable接口

2.Cloneable对象只是一个标识对象,并没有方法

1 public class demo1 {
2     public static void main(String[] args) throws Exception {
3         Person person = new Person("001","狗娃");
4         Person person2 = person.clone();
5         person2.setName("abd");
6         System.out.println(person.toString());
7         System.out.println(person2.toString());
8     }
9 }

输出结果?

技术分享
编号:001姓名:狗娃
编号:001姓名:abd
View Code

3.对象的浅克隆,在克隆一个对象的时候,如果被克隆的对象中维护了另外一个类的对象,这时候只是克隆一个对象的地址而没有把另外一个对象也克隆一份。

技术分享

如图所示,对象的浅克隆只是克隆了address对象的地址,这样我们修改p2对象的时候,会将其内存地址的内容一并修改,所以输出city结果是一样的。

4.对象的浅克隆,也不会调用到构造方法的。

二、对象的深克隆

对象的深克隆:对象的深克隆,就是利用了对象的输入输出流,把对象先写到文件里,然后再读取对象的信息,这个过程称为对象的深克隆。

 1 public class demo2 {
 2     public static void main(String[] args) throws IOException, ClassNotFoundException {
 3         Adress adress = new Adress("北京");
 4         Person person = new Person("002","sony猪",adress);
 5         writObj(person);
 6         Person person2 = readObj(person);
 7         person2.adress.city = "深圳";
 8         System.out.println("person1:"+person.toString());
 9         System.out.println("person2:"+person2.toString());
10     }
11     public static Person readObj(Person person) throws IOException, ClassNotFoundException{
12         FileInputStream fileInputStream = new FileInputStream("E:\\obj.txt");
13         ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
14         return (Person) objectInputStream.readObject();
15     }
16     public static void writObj(Person person) throws IOException{
17         //建立文件的输出流对像
18         FileOutputStream fileOutputStream = new FileOutputStream("E:\\obj.txt");
19         ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
20         objectOutputStream.writeObject(person);
21         objectOutputStream.close();
22     }
23 }

输出结果?

技术分享
person1:编号:002姓名:sony猪 地址:北京
person2:编号:002姓名:sony猪 地址:深圳
View Code

 

Java基础学习 —— 对象的克隆

标签:如图所示   leo   isp   输出流   修改   实现   open   new   demo1   

原文地址:http://www.cnblogs.com/wy0904/p/7505585.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!