java 浅克隆_【java开发系列】—— 深克隆和浅克隆

1 package com.xingoo.clone;2

3 import java.io.ByteArrayInputStream;4 import java.io.ByteArrayOutputStream;5 import java.io.IOException;6 import java.io.ObjectInputStream;7 import java.io.ObjectOutputStream;8 import java.io.Serializable;9 import java.util.Date;10

11 classWife implements Serializable{12 privateString name;13 privateDate birthday;14

15 publicWife(){16 name = "芙蓉姐姐";17 birthday = newDate();18 }19 publicDate getBirthday(){20 returnbirthday;21 }22

23 publicString getName() {24 returnname;25 }26 public voidsetName(String name) {27 this.name =name;28 }29 }30 classHusband implements Cloneable,Serializable{31 privateWife wife;32 privateDate birthday;33

34 publicHusband(){35 wife = newWife();36 birthday = newDate();37 }38

39 publicWife getWife(){40 returnwife;41 }42

43 publicDate getBirthday(){44 returnbirthday;45 }46 /**47 * 浅克隆一个对象48 */

49 publicObject clone() {50 Husband husband = null;51 try{52 husband =(Husband)super.clone();53 }catch(CloneNotSupportedException e){54 e.printStackTrace();55 }finally{56 returnhusband;57 }58 }59 /**60 * 利用串行化深克隆一个对象,把对象以及它的引用读到流里,在写入其他的对象61 * @return62 * @throws IOException63 * @throws ClassNotFoundException64 */

65 publicObject deepClone() throws IOException,ClassNotFoundException {66 //将对象写到流里

67 ByteArrayOutputStream bos = newByteArrayOutputStream();68 ObjectOutputStream oos = newObjectOutputStream(bos);69 oos.writeObject(this);70 //从流里读回来

71 ByteArrayInputStream bis = newByteArrayInputStream(bos.toByteArray());72 ObjectInputStream ois = newObjectInputStream(bis);73 returnois.readObject();74 }75 }76 public classTest {77 public static voidmain(String[] args){78 try{79 Husband husband = newHusband();80 System.out.println("husband birthday"+husband.getBirthday().getTime());81 System.out.println("wife birthday"+husband.getWife().getBirthday().getTime());82 System.out.println();83 Husband husband1 =(Husband)husband.clone();84 System.out.println("husband1 birthday"+husband1.getBirthday().getTime());85 System.out.println("wife birthday"+husband1.getWife().getBirthday().getTime());86 System.out.println();87 System.out.println("是否是同一个husband"+(husband ==husband1));88 System.out.println("是否是同一个wife"+ (husband.getWife() ==husband1.getWife()));89 System.out.println();90 Husband husband2 =(Husband)husband.deepClone();91 System.out.println("husband2 birthday"+husband2.getBirthday().getTime());92 System.out.println("wife birthday"+husband2.getWife().getBirthday().getTime());93 System.out.println();94 System.out.println("是否是同一个husband"+(husband ==husband2));95 System.out.println("是否是同一个wife"+ (husband.getWife() ==husband2.getWife()));96 }catch(Exception e){97 e.printStackTrace();98 }99 }100 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值