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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 顾传文 中级黑马   /  2013-2-28 14:18  /  1834 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 顾传文 于 2013-3-12 09:14 编辑

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
class Test {
    public static void main(String[] args) throws Exception{
        writerObj();
        readObj();
    }
    //将堆内存中的Perosn对象保存到文件中
    public static void writerObj() throws Exception{
        ObjectOutputStream objectOutputStream = new ObjectOutputStream(
                new FileOutputStream("c:\\persons.object"));
        objectOutputStream.writeObject(new Person("guchuanwen",25,"chinese"));
    }
    //将文件中的内容读到堆内存中。
    public static void readObj() throws Exception{
        ObjectInputStream objectInputStream = new ObjectInputStream(
                new FileInputStream("c:\\persons.object"));
        Person person = (Person)objectInputStream.readObject();
        System.out.println(person);
    }
}
/**
* Serializable接口没有需要实现方法,
* 没有实现方法的接口为标记接口。
*/
class Person implements Serializable{
    //serialVersionUID的访问修饰符没有要求,可以为public,private...
    public static final long serialVersionUID = 42L;
    private String name;
    private transient Integer age;
    static String country ="cn";
    public Person(String name,Integer age,String country){
        this.name = name;
        this.age = age;
        this.country = country;
    }
    public String toString(){
        return name+":"+age+":"+country;
    }
}
打印结果:guchuanwen:null:chinese

怎么我这里的county读出来不是cn而是Chinese呢?static类型的字段不是不被序列化的吗?

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1

查看全部评分

2 个回复

正序浏览
静态成员不会被序列化。(当把obj对象写入到文件中时,修改后的静态成员数据不保存入(原始值是什么就还是什么)。它只对堆中的对象序列化)
还有就是 有关键字transient关键字修饰的成员 不被序列化。

具体看毕老师视频   IO流(对象的序列化)

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1

查看全部评分

回复 使用道具 举报
对 你说的没错  声明为static和transient类型的成员数据不能被序列化。因为static代表类的状态
但是this关键字 是指向当前对象 也就是重新给country附上了值     

如果想输出cn 的话   把this去掉 就体现声明为static类型的成员变量不能被序列化

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马