序列化:
概念:将内存中保存的对象变为二进制流进行输出或者保存在文本中。
–将对象变为二进制流
要想让类支持序列化,必须实现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接口即可。
特点:修改任意一个对象,不会对其他对象产生影响
延迟拷贝:浅拷贝+深拷贝