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

Posted CosmosbipinnatusCav

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java基础学习 —— 对象的克隆相关的知识,希望对你有一定的参考价值。

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

一、对象的浅克隆

注意事项:

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基础学习 —— 对象的克隆的主要内容,如果未能解决你的问题,请参考以下文章

学习Java必备的基础知识打卡12.16,要想学好必须扎实基本功(⭐建议收藏)#yyds干货盘点#

第35题JAVA高级技术-对象克隆4(序列化与对象克隆)

JAVA零基础入门系列Day14 Java对象的克隆

第33题JAVA高级技术-对象克隆2(浅克隆)

第35题JAVA高级技术-对象克隆4(序列化与对象克隆)

Java学习笔记——设计模式之六.原型模式(浅克隆和深克隆)