Java transient 关键字

定义和用法

transient 关键字是一个修饰符,用于指示 Java 在序列化对象时忽略某个属性。

相关页面

教程:Java 修饰符

实例

transient 关键字用于防止属性被序列化:

import java.io.*;

public class Main {
  public static void main(String[] args) {
    Person person = new Person();
    person.fname = "Bill";
    person.lname = "Gates";
    person.age = 19;
    person.accessCode = 5044;

    // 序列化对象
    ByteArrayOutputStream output = new ByteArrayOutputStream();
    try {
      ObjectOutputStream objOut = new ObjectOutputStream(output);
      objOut.writeObject(person);
    } catch (IOException e) {}

    // 反序列化对象
    Person person2 = new Person();
    try {
      ObjectInputStream objIn = new ObjectInputStream(new ByteArrayInputStream(output.toByteArray()));
      person2 = (Person) objIn.readObject();
    } catch(Exception e) {}

    // 打印反序列化后的对象
    System.out.println("名字: " + person2.fname);
    System.out.println("姓氏: " + person2.lname);
    System.out.println("年龄: " + person2.age);
    System.out.println("访问代码: " + person2.accessCode); // 此处将打印出 0,因为 accessCode 被标记为 transient,所以未被序列化
  }
}

class Person implements Serializable {
  String fname = "Bill";
  String lname = "Gates";
  int age = 19;
  transient int accessCode = 0; // 这个属性在序列化时会被忽略
}

亲自试一试

在这个例子中,Person 类有一个 transient 修饰的 accessCode 属性。当 Person 对象被序列化时,accessCode 属性不会被包含在序列化数据中。因此,在反序列化后,accessCode 的值将恢复为其默认值(在这个例子中是 0),而不是序列化之前的值(5044)。