Java中的瞬态关键字:它是什么以及它是如何工作的?
已发表: 2022-03-06与所有其他编程语言一样,Java 编程语言有一个具有特定含义的保留字列表。 Java 保留的这组 52 个字称为关键字。 由于它们具有预定义的含义,因此程序员不能使用关键字来命名它们的类、对象、变量和其他标识符。 这 52 个关键字中的一个是瞬态关键字——这将是我们博客的重点!
目录
理解Java中的transient关键字
Transient 是 Java 编程语言中比较有用的修饰符之一。 瞬态关键字的主要作用是在序列化的情况下。 瞬态修饰符可应用于类的字段成员以关闭这些特定成员的序列化。
简单来说,Java中的transient关键字可以被程序员用来避免序列化。 如果任何数据结构的任何特定对象已被程序员定义为瞬态,它将不会被序列化。 因此,您可以使用瞬态关键字向 JVM(Java 虚拟机)表明您的瞬态变量不会成为对象的任何持久状态的一部分。
让我们尝试使用一个非常基本的示例来了解 Java 中瞬态关键字的工作原理。 首先,我们将创建一个 Address 类并为该类定义三个属性——streetName、areaName 和 houseNumber。 我们将保持它是暂时的,因为我们不想存储或保存第三个属性——houseNumber。
类地址实现可序列化 { 私人字符串街道名称; 私有字符串区域名称; 私有瞬态字符串 houseNumber;
//Setter 和 Getter } |
现在让我们序列化 Address 类的一个实例。
试试{ ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(“addressinfo.ser”)); 地址 a = new Address(); a.setstreetName(“MIG”); a.setareaName(“Vikas Nagar”); emp.sethouseNumber(“110”); //序列化对象 oos.writeObject(a); oos.close(); } 捕捉(异常 e) { System.out.println(e); } |
如果我们的代码正常工作,则不会保存“houseNumber”信息,因为我们将其定义为瞬态。 现在,我们将尝试将其反序列化回原始对象,并查看信息是否已保存。
试试{ ObjectInputStream o = new ObjectInputStream(new FileInputStream(“addressinfo.ser”)); //读回对象 地址 readAddressInfo = (Address) o.readObject(); System.out.println(readAddressInfo.getstreetName()); System.out.println(readAddressInfo.getareaName()); System.out.println(readAddressInfo.gethouseNumber()); o.close(); } 捕捉(异常 e) { System.out.println(e); } |
如果您运行上述 Java 程序,您将收到以下输出:
米格
维卡斯纳加尔
空值
如您所见,由于序列化,“houseNumber”信息没有保存到永久状态,这就是我们接收值“null”作为输出的原因。 这正是使用瞬态关键字的原因——以一种非永久的但瞬态的方式将值存储到变量中。
Java中'transient'关键字的用例
现在您了解了瞬态关键字及其作用,接下来出现的逻辑问题是——我们什么时候使用瞬态关键字?
让我们通过深入研究您将从使用瞬态关键字中受益的一些情况来扩展我们对瞬态关键字的了解。
以下是一些常见的用例供您牢记:
- 瞬态关键字的第一个用例是在您可能具有从类实例中的某些其他字段计算或派生的数据字段的情况下。 因此,这些字段需要以编程方式计算,并且它们依赖于其他值。 这就是为什么不让这些字段持久化,而是可以使用瞬态关键字对它们进行非序列化。 从其他数字计算的此类瞬态值的示例可能包括基于时间戳的值、基于百分比的值等。在所有这些情况下,您正在根据当前存在的值计算变量的值。
- 另一个重要的用例可能是,当您使用任何类型的安全信息时,这些信息在任何情况下都不应该泄漏到 JVM 之外,然后可以使用瞬态关键字对其进行非序列化。
- Java 开发工具包中未标记为“可序列化”的字段可以与瞬态关键字一起使用。 这里需要注意的重要一点是,所有没有实现可序列化接口的 Java 类都不能被序列化,因为它们没有在任何可序列化类中引用。 因此,如果在序列化主类之前没有标记为“transient”,这些可能会抛出“java.io.NotSerializableException”。
- 最后,在某些情况下序列化某些字段没有意义。 例如,如果您在代码中添加了记录器引用,您就不想序列化该信息。 您应该序列化表示实例状态的信息。 另一方面,记录器不代表任何状态,因此序列化它们没有用处。 因此,它们应该与瞬态关键字一起使用。
综上所述
上面讨论的用例绝不是详尽的。 尝试使用 transient 关键字并提出您自己的用例。 毕竟,关键字是为程序员设计的,只有当您知道它们的功能和含义时,您才能制作大部分关键字。
至此,我们结束了这篇关于 Java 中的瞬态关键字的博客。 这是为了在您的软件开发职业生涯中成长而必须掌握的更具介绍性的概念之一。 软件开发领域非常活跃,但如果您准备好全力以赴并尽最大努力,那么您将非常欢迎!
在 upGrad,我们指导和指导了来自世界各地的学生,他们属于不同的领域,并帮助他们开始了他们的软件开发职业生涯。 我们的软件开发 PGP – 全栈开发专业专为新手和经验丰富的专业人士而设计。 除了专家导师和最先进的学习材料外,您还可以获得才华横溢的同行、全面的就业支持以及与行业领导者的一对一指导。 因此,请查看课程内容并尽快注册!
1、Java中的transient关键字是什么?
Java 中的瞬态关键字可用于避免对象的序列化。 使用瞬态关键字,您可以确保特定字段持有的值不会持久。
2.Java中哪些元素可以使用transient关键字?
您可以在 Java 中使用瞬态关键字对类、变量、对象或字段进行非序列化。
3. Java中的transient关键字和volatile关键字有什么区别?
瞬态关键字用于避免序列化过程,而 volatile 关键字与变量一起使用,因此它不会存储在主存储器中。