A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 卞潇洋 中级黑马   /  2012-11-22 16:04  /  1658 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

基本序列化的魔力仅仅是由两个方法产生:一个方法用于序列化对象并将它们写入一个流,另一个方法用于读取流并反序列化对象.
当序列化一个对象时,java序列化机制会负责保存对象的整个“对象图”,它是恢复所保存的对象所需一切内容的深度复制。相当于方法clone()。

如果Dog类中包含有Collar实例对象,序列化Dog对象,则会自动序列化Collar。如果Collar类包含一个指向另一对象的引用,则那个对象也会被序列化,依次类推。

但要同时对Collar实现Serializable接口。

但如果我们不序列化一个实例变量,比如Collar类可能是最终类,从而无法子类化。这就是引入transient修饰符的原因。
但有一种点很重要,也是反序列化与使用new创建对象之间的区别。使用new构造对象时,会发生实例变量都被赋予默认值、完成超类构造函数、实例变量对被赋予初始值、构造函数完成,但对象被反序列化时,不会发生这些事情。例如:
  1. <font size="3">class Foo implements Serializable{
  2. int num =3;
  3. void changeNum(){
  4.   num = 10;
  5. }
  6. }</font>
复制代码

当changeNum()运行后,反序列化一个Foo实例,则反序列化的对象不会发生任何常规的初始化。



评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

1 个回复

倒序浏览
值得学习ing!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马