Java transient关键字

在Java中,transient关键字用于标记对象的某个数据成员不应该被序列化。例如,在处理敏感信息如密码时,可以使用transient避免这些信息被持久化。当对象被序列化时,transient变量的值不会被保存,反序列化后其值将恢复为默认值。在示例中,一个Student类的age字段被声明为transient,因此在序列化和反序列化过程中,age的值未被保留,反序列化后age显示为0。
摘要由CSDN通过智能技术生成

在 Java 中,序列化用于将对象转换为字节流。字节流由实例的数据以及存储在该实例中的数据类型组成。反序列化执行完全相反的操作。它将字节序列转换为原始对象数据。在序列化过程中,当我们不想序列化对象时,可以使用transient 关键字。

为什么要使用transient 关键字?

transient 关键字可以与类的数据成员一起使用,以避免它们的序列化。例如,如果程序接受用户的登录详细信息和密码。但是我们不想将原始密码存储在文件中。在这里,我们可以使用transient 关键字,当 JVM 读取transient 关键字时,它会忽略对象的原始值,而是存储对象的默认值。

句法:

private transient <member variable>;  

transient private <member variable>;  

何时使用transient 关键字?

  1. transient 修饰符可用于存在从同一类实例中的其他数据成员派生的数据成员的情况。
  2. 这个transient 关键字可以与不描述对象状态的数据成员一起使用。
  3. 非序列化对象或类的数据成员可以使用transient 修饰符。

Java transient 关键字示例

举个例子,我们声明了一个类为Student,它有三个数据成员id、nameage。如果你序列化对象,所有的值都将被序列化,但我们不想序列化一个值,例如age,那么我们可以将年龄数据成员声明为transient

在这个例子中,我们创建了两个类StudentPersistExampleStudent类的age数据成员被声明为transient,它的值不会被序列化。

如果您反序列化对象,您将获得transient变量的默认值。

让我们创建一个带有transient变量的类。

Student.java


import java.io.*;

public class Student implements Serializable {

    int id;
    String name;
    transient int age;//Now it will not be serialized

    public Student(int id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }
}

PersistExample.java


import java.io.FileOutputStream;
import java.io.ObjectOutputStream;

class PersistExample {

    public static void main(String args[]) throws Exception {
        Student s1 = new Student(211, "ravi", 22);//creating object
        //writing object into file
        FileOutputStream f = new FileOutputStream("f.txt");
        ObjectOutputStream out = new ObjectOutputStream(f);
        out.writeObject(s1);
        out.flush();
        out.close();
        f.close();
        System.out.println("success");
    }
}

输出:

success

现在编写反序列化代码。

DePersist.java


import java.io.*;

class DePersist {

    public static void main(String args[]) throws Exception {
        ObjectInputStream in = new ObjectInputStream(new FileInputStream("f.txt"));
        Student s = (Student) in.readObject();
        System.out.println(s.id + " " + s.name + " " + s.age);
        in.close();
    }
}

输出:

211 ravi 0

如您所见,打印学生的年龄返回 0,因为年龄的值未序列化。

在本文中,我们讨论了Java中transient关键字的使用,在Java程序中使用transient关键字的位置以及transient关键字的实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值