Java中的transient关键字

Posted tuyang1129

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中的transient关键字相关的知识,希望对你有一定的参考价值。

今天刷面试题,碰到了一道这样的题:

  技术图片

  上图中的transient关键字我第一次遇见,于是看了些博客,了解了它的用法。

 

transient关键字的作用:

  transient用来修饰类的成员属性,而被transient修饰的属性在对象被序列化时,不会进行序列化;

  所以transient关键字的作用就是让类的成员属性不被序列化。常用在没有必要进行序列化的属性之上,比如说一个矩形类有三个属性,分别为长、宽和面积,而面积可以通过长宽推导出来,所以如果需要序列化矩形类的对象,那这个面积属性可以不用序列化,其好处就是节约空间;

 

代码演示:

 1 import java.io.FileInputStream;
 2 import java.io.FileOutputStream;
 3 import java.io.IOException;
 4 import java.io.ObjectInputStream;
 5 import java.io.ObjectOutputStream;
 6 import java.io.Serializable;
 7 
 8 public class Test implements Serializable
 9 
10     private Integer length;        //
11     private Integer width;        //
12     private transient Integer area;    //面积,使用transient修饰
13     
14     public Test() 
15     
16     
17     public Test(Integer length, Integer width) 
18         this.length = length;
19         this.width = width;
20         this.area = length * width;
21     
22 
23     public static void main(String[] args) throws IOException, IOException, ClassNotFoundException 
24         //创建对象
25         Test t = new Test(3, 4);
26         
27         //输出原对象
28         System.out.println(t);
29         
30         //创建对象输出流,将对象写入文件中
31         ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("file"));
32         oos.writeObject(t);
33         
34         //创建对象输入流
35         ObjectInputStream ois = new ObjectInputStream(new FileInputStream("file"));
36         //从文件中读取对象
37         Test t2 = (Test)ois.readObject();
38         
39         //输出反序列化得到的对象
40         System.out.println(t2);
41         
42         oos.close();
43         ois.close();
44     
45 
46     @Override
47     public String toString() 
48         return "Test [length=" + length + ", width=" + width + ", area=" + area + "]";
49     
50     
51 

 

 

代码结果:

技术图片

 

  可以看到,经过反序列化后,length和width的值未改变,而area为null,表示area并未被序列化。

 

以上是关于Java中的transient关键字的主要内容,如果未能解决你的问题,请参考以下文章

Java中的关键字“transient”是啥意思? [复制]

关于Java中的transient关键字

java中的关键字——transient

Java中的transient关键字

java中的关键字transient是啥意思

transient在java中的作用