黑马程序员技术交流社区
标题:
关于序列化的问题
[打印本页]
作者:
乎¤_¤乎
时间:
2013-5-24 16:47
标题:
关于序列化的问题
本帖最后由 乎¤_¤乎 于 2013-5-24 20:22 编辑
知道了静态成员是不能被序列化的,现在Person类中 有一个 public static String cont=“cn”但是为什么如下程序能够打印出 “huhu”,而注释打印的功能先执行写入对象,再把写入对象的功能注释,执行打印功能,就能打印出“cn”???
public class Demo {
public static void main(String[] args)throws Exception {
writeObj();//写入对象
System.out.println(readObj());//打印对象的国籍
}
public static void writeObj()throws Exception
{
ObjectOutputStream oop=new ObjectOutputStream(new FileOutputStream("1.txt"));
oop.writeObject(new Person("张三",24,"huhu"));
oop.close();
}
public static String readObj()throws Exception
{
ObjectInputStream oip=new ObjectInputStream(new FileInputStream("1.txt"));
Person p=(Person) oip.readObject();
oip.close();
return p.getCont();
}
}
复制代码
作者:
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