日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何实现对象克隆?

發(fā)布時(shí)間:2024/1/17 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何实现对象克隆? 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

有兩種方式:
1). 實(shí)現(xiàn)Cloneable接口并重寫Object類中的clone()方法;
2). 實(shí)現(xiàn)Serializable接口,通過對象的序列化和反序列化實(shí)現(xiàn)克隆,可以實(shí)現(xiàn)真正的深度克隆,代碼如下。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; public class MyUtil { ????private MyUtil() { ????????throw new AssertionError(); ????} ????public static <T> T clone(T obj) throws Exception { ????????ByteArrayOutputStream bout = new ByteArrayOutputStream(); ????????ObjectOutputStream oos = new ObjectOutputStream(bout); ????????oos.writeObject(obj); ????????ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray()); ????????ObjectInputStream ois = new ObjectInputStream(bin); ????????return (T) ois.readObject(); ????????// 說明:調(diào)用ByteArrayInputStream或ByteArrayOutputStream對象的close方法沒有任何意義 ????????// 這兩個(gè)基于內(nèi)存的流只要垃圾回收器清理對象就能夠釋放資源,這一點(diǎn)不同于對外部資源(如文件流)的釋放 ????} }

下面是測試代碼:

?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 import java.io.Serializable; /** ?* 人類 ?* @author? ?* ?*/ class Person implements Serializable { ????private static final long serialVersionUID = -9102017020286042305L; ????private String name;??? // 姓名 ????private int age;??????? // 年齡 ????private Car car;??????? // 座駕 ????public Person(String name, int age, Car car) { ????????this.name = name; ????????this.age = age; ????????this.car = car; ????} ????public String getName() { ????????return name; ????} ????public void setName(String name) { ????????this.name = name; ????} ????public int getAge() { ????????return age; ????} ????public void setAge(int age) { ????????this.age = age; ????} ????public Car getCar() { ????????return car; ????} ????public void setCar(Car car) { ????????this.car = car; ????} ????@Override ????public String toString() { ????????return "Person [name=" + name + ", age=" + age + ", car=" + car + "]"; ????} }

?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 /** ?* 小汽車類 ?* @author? ?* ?*/ class Car implements Serializable { ????private static final long serialVersionUID = -5713945027627603702L; ????private String brand;?????? // 品牌 ????private int maxSpeed;?????? // 最高時(shí)速 ????public Car(String brand, int maxSpeed) { ????????this.brand = brand; ????????this.maxSpeed = maxSpeed; ????} ????public String getBrand() { ????????return brand; ????} ????public void setBrand(String brand) { ????????this.brand = brand; ????} ????public int getMaxSpeed() { ????????return maxSpeed; ????} ????public void setMaxSpeed(int maxSpeed) { ????????this.maxSpeed = maxSpeed; ????} ????@Override ????public String toString() { ????????return "Car [brand=" + brand + ", maxSpeed=" + maxSpeed + "]"; ????} }

?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 class CloneTest { ????public static void main(String[] args) { ????????try { ????????????Person p1 = new Person("Hao LUO", 33, new Car("Benz", 300)); ????????????Person p2 = MyUtil.clone(p1);?? // 深度克隆 ????????????p2.getCar().setBrand("BYD"); ????????????// 修改克隆的Person對象p2關(guān)聯(lián)的汽車對象的品牌屬性 ????????????// 原來的Person對象p1關(guān)聯(lián)的汽車不會(huì)受到任何影響 ????????????// 因?yàn)樵诳寺erson對象時(shí)其關(guān)聯(lián)的汽車對象也被克隆了 ????????????System.out.println(p1); ????????} catch (Exception e) { ????????????e.printStackTrace(); ????????} ????} }

?

轉(zhuǎn)載于:https://www.cnblogs.com/wanghx-0713/p/7879913.html

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的如何实现对象克隆?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。