拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 Java中的transient关键字

Java中的transient关键字

白鹭 - 2021-11-24 501 0 0

1.简介

在本文中,我们将首先理解transient关键字,然后通过示例查看其行为。

2. transient

首先让我们了解序列化,然后再转向transient因为它是在序列化的上下文中使用的。

序列化是将对象转换为字节流的过程,而反序列化则与之相反

当我们将任何变量标记为transient,则该变量不会被序列化。因此,序列化过程将忽略变量的原始值,并保存该数据类型的默认值。

transient关键字在某些情况下很有用:

  • 我们可以将其用于派生字段
  • 对于不代表对象状态的字段很有用
  • 我们将其用于任何不可序列化的引用

3.例子

为了看到它的实际效果,让我们首先创建一个Book类,我们要对其序列化的对象是:

public class Book implements Serializable {

 private static final long serialVersionUID = -2936687026040726549L;

 private String bookName;

 private transient String description;

 private transient int copies;



 // getters and setters

 }

在这里,我们已将descriptioncopies标记为transient字段。

创建类之后,我们将创建该类的对象:

Book book = new Book();

 book.setBookName("Java Reference");

 book.setDescription("will not be saved");

 book.setCopies(25);

现在,我们将对象序列化为文件:

public static void serialize(Book book) throws Exception {

 FileOutputStream file = new FileOutputStream(fileName);

 ObjectOutputStream out = new ObjectOutputStream(file);

 out.writeObject(book);

 out.close();

 file.close();

 }

让我们现在从文件中反序列化对象:

public static Book deserialize() throws Exception {

 FileInputStream file = new FileInputStream(fileName);

 ObjectInputStream in = new ObjectInputStream(file);

 Book book = (Book) in.readObject();

 in.close();

 file.close();

 return book;

 }

最后,我们将验证book对象的值:

assertEquals("Java Reference", book.getBookName());

 assertNull(book.getDescription());

 assertEquals(0, book.getCopies());

在这里,我们看到bookName已正确保留。另一方面, copies字段的值为0descriptionnull –它们各自数据类型的默认值),而不是原始值。

4.行为与final

现在,让我们看一个特殊的情况,我们将对final关键字transient为此,首先,我们在Book final transient元素,然后创建一个空的Book对象:

public class Book implements Serializable {

 // existing fields



 private final transient String bookCategory = "Fiction";



 // getters and setters

 }
Book book = new Book();

在反序列化后验证值时,我们会发现**transient ,并且原始值得以保留**:

assertEquals("Fiction", book.getBookCategory());

5.结论

在本文中,我们看到了transient关键字的用法及其在序列化和反序列化中的行为。我们也看到了与final关键字不同的行为。

标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *