黑马程序员技术交流社区

标题: 关于序列化的问题 [打印本页]

作者: 乎¤_¤乎    时间: 2013-5-24 16:47
标题: 关于序列化的问题
本帖最后由 乎¤_¤乎 于 2013-5-24 20:22 编辑

知道了静态成员是不能被序列化的,现在Person类中 有一个 public static String cont=“cn”但是为什么如下程序能够打印出 “huhu”,而注释打印的功能先执行写入对象,再把写入对象的功能注释,执行打印功能,就能打印出“cn”???
  1. public class Demo {

  2. public static void main(String[] args)throws Exception {

  3. writeObj();//写入对象
  4. System.out.println(readObj());//打印对象的国籍
  5. }
  6. public static void writeObj()throws Exception
  7. {
  8. ObjectOutputStream oop=new ObjectOutputStream(new FileOutputStream("1.txt"));
  9. oop.writeObject(new Person("张三",24,"huhu"));
  10. oop.close();

  11. }
  12. public static String readObj()throws Exception
  13. {
  14. ObjectInputStream oip=new ObjectInputStream(new FileInputStream("1.txt"));
  15. Person p=(Person) oip.readObject();
  16. oip.close();
  17. return p.getCont();
  18. }

  19. }
复制代码

作者: tshch1989    时间: 2013-5-24 17:11
确实能打印,在readObj()返回的是p.getCont(),你可能不理解的是,既然没有写入到文件为什么能打印是吧?静态是随着类的加载而加载的是所有对象共享的,不是特有数据,不需要序列化,
作者: 乎¤_¤乎    时间: 2013-5-24 20:20
我还是自问自答吧:
第一种情况是,
writeObj();//写入对象
System.out.println(readObj());//打印对象的国籍
这时“huhu”并没有传进文件中
而读取时这时的cont 已经改成了“huhu”所以能打印
而后面的情况就是
当只运行writeObj();时候文件没有把“huhu”放进去;然后程序结束
而后,只运行System.out.println(readObj());//打印对象的国籍,把存放进文件的名字和年龄取出,这时候的cont没有改动仍是“cn”
所以打印出“cn”







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2