03.Java 关键字

来源:互联网 发布:php视频网站 编辑:程序博客网 时间:2024/06/08 07:35

基本概念

在介绍 transient 关键字之前,要了解序列化的概念。

该关键字具有以下特点:

  • 只能修饰成员变量,而不能修饰方法入参、方法、类。
  • 被其修饰的变量,表示该类变量是瞬态的,常规情况下无法被序列化。

若类实现了 Externalizable 接口或自定义序列化过程,被修饰的变量也能被序列化。


实例探究

下面来看具体的例子:

  • 定义一个 Person 类,并实现了 Serializable 接口
class Person implements Serializable {    // 关键    private transient int age;    private String name;    public Person(String name ,int age){        this.name = name;        this.age =age;    }    public String getName() {        return name;    }    public int getAge() {        return age;    }    @Override    public String toString() {        return "name is " + name + " , age is " + age;    }}
  • 进行序列化操作
public class Test {    private final static String TEMPFILE = "E:" + File.separator + "test.txt";    public static void main(String[] args) {        Person person = new Person("test",100);        write(person);        // 关键 -> 序列化之后重新对对象进行赋值        person = new Person("hello",999);        read(person);        // 输出结果:        // name is test , age is 100,序列化成功        // 反序列化成功,name is test , age is 0    }    // 通过 ObjectOutputStream 进行对象的序列化操作    private static void write(Person person) {        try {            ObjectOutputStream oos =                 new ObjectOutputStream(new FileOutputStream(TEMPFILE));            oos.writeObject(person);            oos.close();            System.out.println(person+",序列化成功");        } catch (Exception e) {            e.printStackTrace();        }    }    // 通过 ObjectInputStream 进行对象的反序列化操作    private static void read(Person person) {        try {            ObjectInputStream ois =                 new ObjectInputStream(new FileInputStream(TEMPFILE));            person = (Person) ois.readObject();            ois.close();            System.out.println("反序列化成功.,"+person);        } catch (Exception e) {            e.printStackTrace();        }    }}

观察输出结果,发现序列化之前 age 的是 100,而通过反序列化读取的 age 为 0。

int 类型的参数初始值为 0,这也正说明了该参数没有被序列化。


0 0
原创粉丝点击