1. 程式人生 > >Java基礎學習 —— 對象的克隆

Java基礎學習 —— 對象的克隆

北京 方法 com cep not nbsp urn pla ima

對象的克隆分為對象的淺克隆和深克隆

一、對象的淺克隆

註意事項:

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基礎學習 —— 對象的克隆