Java基礎學習 —— 對象的克隆
阿新 • • 發佈:2017-09-13
北京 方法 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基礎學習 —— 對象的克隆