咱們能夠利用clone方法來實現對象只見的複製,但對於比較複雜的對象(好比對象中包含其餘對象,其餘對象又包含別的對象.....)這樣咱們必須進行層層深度clone,每一個對象須要實現 cloneable接口,比較麻煩,那就繼續學習下一個序列化方法。java
建立ide
/* * 文 件 名: A.java 版 權: Unis Cloud Information Technology Co., Ltd. Copyright * 2015, All rights reserved 描 述: <描述> 修 改 人: Administrator 修改時間: 2015-11-10 * 跟蹤單號: <跟蹤單號> 修改單號: <修改單號> 修改內容: <修改內容> */ package com.hubin.supers; import java.io.Serializable; /** * <一句話功能簡述> <功能詳細描述> * * @author Administrator * @version [版本號, 2015-11-10] * @see [相關類/方法] * @since [產品/模塊版本] */ public class A implements Serializable { private String name; private int age; /** * @return 返回 name */ public String getName() { return name; } /** * @param 對name進行賦值 */ public void setName(String name) { this.name = name; } /** * @return 返回 age */ public int getAge() { return age; } /** * @param 對age進行賦值 */ public void setAge(int age) { this.age = age; } /** * @return */ @Override public String toString() { return "A [name=" + name + ", age=" + age + "]"; } }
建立B類:
學習
/* * 文 件 名: B.java 版 權: Unis Cloud Information Technology Co., Ltd. Copyright * 2015, All rights reserved 描 述: <描述> 修 改 人: Administrator 修改時間: 2015-11-10 * 跟蹤單號: <跟蹤單號> 修改單號: <修改單號> 修改內容: <修改內容> */ package com.hubin.supers; import java.io.Serializable; /** * <一句話功能簡述> <功能詳細描述> * * @author Administrator * @version [版本號, 2015-11-10] * @see [相關類/方法] * @since [產品/模塊版本] */ public class B implements Serializable { private A a; private String name; /** * @return 返回 a */ public A getA() { return a; } /** * @param 對a進行賦值 */ public void setA(A a) { this.a = a; } /** * @return 返回 name */ public String getName() { return name; } /** * @param 對name進行賦值 */ public void setName(String name) { this.name = name; } /** * @return */ @Override public String toString() { return "B [a=" + a + ", name=" + name + "]"; } }
建立測試Desc類:測試
/* * 文 件 名: Desc.java 版 權: Unis Cloud Information Technology Co., Ltd. Copyright * 2015, All rights reserved 描 述: <描述> 修 改 人: Administrator 修改時間: 2015-11-10 * 跟蹤單號: <跟蹤單號> 修改單號: <修改單號> 修改內容: <修改內容> */ package com.hubin.supers; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.util.ArrayList; import java.util.List; /** * * @author Administrator * @version [版本號, 2015-11-10] * @see [相關類/方法] * @since [產品/模塊版本] */ public class Desc { public static void main(String[] args) throws Exception { A a = new A(); a.setName("張三"); a.setAge(10); B b = new B(); b.setA(a); b.setName("南京"); List<B> list = new ArrayList<B>(); list.add(b); ByteArrayOutputStream byteOut = new ByteArrayOutputStream(); ObjectOutputStream out = new ObjectOutputStream(byteOut); out.writeObject(list); ByteArrayInputStream byteIn = new ByteArrayInputStream( byteOut.toByteArray()); ObjectInputStream in = new ObjectInputStream(byteIn); List<B> list1 = (List<B>) in.readObject(); list1.get(0).getA().setName("李四"); System.out.println(list.get(0)); System.out.println(list1.get(0)); } }
結果:this
B [a=A [name=張三, age=10], name=南京]spa
B [a=A [name=李四, age=10], name=南京]code
從結果能夠看到當修改序列化後的對象的值不會影響原先對象的值,因此能夠經過序列化進行深度克隆orm