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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 柳彬 中级黑马   /  2012-9-13 09:03  /  2326 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 柳彬 于 2012-9-24 08:05 编辑

关于对象序列化应该注意哪些问题?比如静态成员是否可以序列化?

评分

参与人数 1黑马币 +3 收起 理由
唐志兵 + 3 赞一个!

查看全部评分

5 个回复

倒序浏览
静态成员不能被序列化。
非静态成员也不想被序列化用transient关键字。
不序列化非静态成员是为了保证其值在堆内存中存在,而不在文本文件中存在
回复 使用道具 举报
1、什么是序列化?

序列化: 将对象在网络上传输或保存在文件。

2、什么情况下用到序列化?

(1) 当你想把的内存中的对象保存到一个文件中或者数据库中时候;

(2) 当你想用套接字在网络上传送对象的时候;

(3)  当你想通过RMI传输对象的时候;


3、序列化对象时应该注意的问题?

(1) 当一个父类实现序列化,子类自动实现序列化,不需要显式实现Serializable接口;

(2) 当一个对象的实例变量引用其他对象,序列化该对象时也把引用对象进行序列化;

(3) 并非所有的对象都可以序列化


3.1、安全性能方面,  比如一个对象拥有private,public等field,对于一个要传输的对象,比如写到文件,或者进行rmi传输 等等,在序列化进行传输的过程中,这个对象的private等域是不受保护的。
回复 使用道具 举报
李菁 发表于 2012-9-13 14:50
静态成员不能被序列化。
非静态成员也不想被序列化用transient关键字。
不序列化非静态成员是为了保证其值 ...

能详细的讲一下景静态成员为什么不能序列化吗,用对象去改变该静态成员的值很符合逻辑啊
回复 使用道具 举报
何明辉 发表于 2012-9-13 15:37
能详细的讲一下景静态成员为什么不能序列化吗,用对象去改变该静态成员的值很符合逻辑啊 ...

因为对象的序列化是为了保存对象。
静态成员属于类的,不属于对象,所以不能被序列化。
回复 使用道具 举报
李菁 发表于 2012-9-13 15:46
因为对象的序列化是为了保存对象。
静态成员属于类的,不属于对象,所以不能被序列化。 ...

嗯,静态成员是属于类变量,在静态方法去中存储,但我认为序列化的是堆中的动态方法区中的数据(不知道我说的有错没),那如果不能被序列化,那又怎么能序列类变量了?
如果这个道理说的通,那怎么理解对象给静态赋值的问题。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马