java transient的用法是什么

   2025-02-13 5180
核心提示:在Java中,transient关键字用于修饰一个类的成员变量,表示该成员变量不会被默认的序列化机制所序列化。当一个对象被序列化时,

在Java中,transient关键字用于修饰一个类的成员变量,表示该成员变量不会被默认的序列化机制所序列化。

当一个对象被序列化时,其所有的成员变量都会被序列化,然后才能被传输或保存到磁盘上。但有时候某些成员变量并不需要被序列化,例如敏感信息或不重要的临时数据。在这种情况下,可以使用transient关键字来标记这些成员变量,使得它们不会被序列化。

使用transient关键字修饰的成员变量将在序列化过程中被忽略。当对象被反序列化时,这些成员变量的值将恢复为默认值(例如数值类型为0,引用类型为null)。

下面是一个示例:

import java.io.Serializable;public class Person implements Serializable {    private String name; // 会被序列化    private transient String password; // 不会被序列化    // 构造方法,getter和setter等省略...    @Override    public String toString() {        return "Person{" +                "name='" + name + '\'' +                ", password='" + password + '\'' +                '}';    }}

在上面的例子中,name成员变量会被序列化,而password成员变量被transient修饰,不会被序列化。当将一个Person对象序列化后,password字段会被忽略。

import java.io.*;public class Main {    public static void main(String[] args) {        Person person = new Person("Alice", "123456");        // 序列化对象        try (FileOutputStream fileOut = new FileOutputStream("person.ser");             ObjectOutputStream out = new ObjectOutputStream(fileOut)) {            out.writeObject(person);        } catch (IOException e) {            e.printStackTrace();        }        // 反序列化对象        try (FileInputStream fileIn = new FileInputStream("person.ser");             ObjectInputStream in = new ObjectInputStream(fileIn)) {            Person deserializedPerson = (Person) in.readObject();            System.out.println(deserializedPerson);        } catch (IOException | ClassNotFoundException e) {            e.printStackTrace();        }    }}

在上面的例子中,Person对象被序列化后保存到person.ser文件中。然后,再从该文件中反序列化得到对象,并打印出来。可以观察到反序列化后的对象的password字段值为null,而name字段值为Alice

 
 
更多>同类维修知识
推荐图文
推荐维修知识
点击排行
网站首页  |  关于我们  |  联系方式  |  用户协议  |  隐私政策  |  网站留言