JVM-深浅拷贝、序列化

序列化:
概念:将内存中保存的对象变为二进制流进行输出或者保存在文本中。
–将对象变为二进制流

要想让类支持序列化,必须实现Serializable接口。(标识接口)
Serializable接口为标识接口,只有实现了Serializable接口的类才具备对象序列化功能。

具体实现序列化和反序列化,需要使用io包中提供的俩个处理类:
序列化类:ObjectOutputStream:
选择目标终端
public ObjectOutputStream(OutputStream out) throws IOException
weiteObject(Object obj):将obj变为二进制流输出到目标终端

反序列化类:ObjectInputStream:
选择反序列化的目标终端
public ObjectInputStream(InputStream in) throws IOException
public final Object readObject();将二进制流反序列化为对象

transient关键字:
若希望类中的若干属性不被序列化,可以在属性前添加transient关键字

一 、 深浅拷贝 (对象)
Cloneable:CloneNotSupportedException;
只有子类实现了Cloneable接口后才可以使用Object类提供的clone方法。
protected native Object clone() throws CloneNotSupportedException;

要想让对象具有拷贝的功能,必须实现Cloneable接口(标识接口,表示此类允许被clone),并且在类中自定义clone调用Object类提供的继承权限clone方法。

浅拷贝:对象值拷贝
对于浅拷贝而言,拷贝出来的对象仍然保留原对象的所有引用。

问题: 牵一而动全身
只要任意一个拷贝对象(或原对象)中的引用发生改变,所有对象均会受到影响。

深拷贝:
深拷贝拷贝出来的对象产生了所有引用的新的对象。

如何实现深拷贝:
1 . 包含的其他类继续实现Cloneable接口,并且调用clone方法
2 . 使用序列化(*******)
使用序列化进行深拷贝,无须在实现Cloneable接口,只需要实现Serializable接口即可。

特点:修改任意一个对象,不会对其他对象产生影响

延迟拷贝:浅拷贝+深拷贝

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值