黑马程序员技术交流社区
标题:
对象序列化问题
[打印本页]
作者:
卞潇洋
时间:
2012-11-22 16:04
标题:
对象序列化问题
基本序列化的魔力仅仅是由两个方法产生:一个方法用于序列化对象并将它们写入一个流,另一个方法用于读取流并反序列化对象.
当序列化一个对象时,java序列化机制会负责保存对象的整个“对象图”,它是恢复所保存的对象所需一切内容的深度复制。相当于方法clone()。
如果Dog类中包含有Collar实例对象,序列化Dog对象,则会自动序列化Collar。如果Collar类包含一个指向另一对象的引用,则那个对象也会被序列化,依次类推。
但要同时对Collar实现Serializable接口。
但如果我们不序列化一个实例变量,比如Collar类可能是最终类,从而无法子类化。这就是引入transient修饰符的原因。
但有一种点很重要,也是反序列化与使用new创建对象之间的区别。使用new构造对象时,会发生实例变量都被赋予默认值、完成超类构造函数、实例变量对被赋予初始值、构造函数完成,但对象被反序列化时,不会发生这些事情。例如:
<font size="3">class Foo implements Serializable{
int num =3;
void changeNum(){
num = 10;
}
}</font>
复制代码
当changeNum()运行后,反序列化一个Foo实例,则反序列化的对象不会发生任何常规的初始化。
作者:
许庭洲
时间:
2012-11-23 07:27
值得学习ing!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2