zoukankan      html  css  js  c++  java
  • 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并未被序列化。

  • 相关阅读:
    Python量化分析,计算KDJ
    Ubuntu16.04安装Python3.6 和pip(python3 各版本切换)
    使用docker加载已有镜像安装Hyperledger Fabric v1.1.0
    Ubuntu 16.04将左侧面板置于底部
    解决Flask局域网内访问不了的问题
    Ubuntu 16.04 安装Go 1.9.2
    Ubuntu16.04下安装Hyperledger Fabric 1.0.0
    Ubuntu 16.04安装Docker-CE
    用Python抓取网页并解析
    图解python中赋值、浅拷贝、深拷贝的区别
  • 原文地址:https://www.cnblogs.com/tuyang1129/p/11198184.html
Copyright © 2011-2022 走看看