美文网首页java开发JAVA常用知识点
JAVA中transient关键字的使用

JAVA中transient关键字的使用

作者: 两句挽联 | 来源:发表于2017-02-20 15:50 被阅读0次

transient这个关键字,在java中大家可能遇到的不多,最近阅读JDK源码的时候看到,和大家分享一下。
transient,在序列化和反序列化的时候,可以进行关键字的屏蔽,只对需要进行持久化的字段进行序列化。即

  1. 在进行序列化的时候,此关键字修饰的成员变量,不进行序列化的操作
  2. 同理,在进行反序列化的时候,也同样“无视”这个关键字修饰的变量,当然这句是废话,序列化的时候已经丢了这个属性,再反序列化的时候自然没了

下面,使用程序员最理解的语言来说吧
我们有一个简单的名为Student的Class

import java.io.Serializable;

public class Student implements Serializable {
    /**
     * 进行序列化时候最好指定这个UID
     */
    private static final long serialVersionUID = -766571861519198043L;
    private String name;
    private String sex;

    public Student(String name, String sex) {
        super();
        this.name = name;
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "Student [name=" + name + ", sex=" + sex + "]";
    }

}

测试方法如下,主要是先持久化一个类,然后再反序列化出来看输出如何

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

public class SerializableTest {

    public static void main(String[] args) throws IOException, ClassNotFoundException {

        Student st = new Student("lili", "girl");

        System.out.println(st);

        FileOutputStream fos = new FileOutputStream("test.out");
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        oos.writeObject(st);
        oos.flush();
        oos.close();
        fos.close();

        FileInputStream fis = new FileInputStream("test.out");
        ObjectInputStream ois = new ObjectInputStream(fis);
        Student st1 = (Student) ois.readObject();
        ois.close();
        fis.close();

        System.out.println(st1);

    }

}

输出如下:

Student [name=lili, sex=girl]
Student [name=lili, sex=girl]

然后,我们将Student中的sex字段使用transient来修饰

private transient String sex;

再次运行,输出如下

Student [name=lili, sex=girl]
Student [name=lili, sex=null]

可见,我们在序列化的时候成功丢弃了sex这个属性。这边说明一点,这个transient只能修饰成员变量,不能修饰方法!!

OK,说明完毕,有误的地方还请见谅!

相关文章

  • 无标题文章

    # java关键字## 一、transient### transient的作用及使用方法如何将非静态的数据不进行序...

  • Effective Java 序列化

    AtomicReference transient java 的transient关键字 只需要实现Seriliz...

  • Java Volatile transient 关键字

    Java Volatile transient 关键字 java关键字volatile Volatile修饰的成员...

  • Java基础题

    transient和volatile是java关键字吗? transient是变量修饰符。标记为transient...

  • JAVA使用Gson排除特定字段【转发】

    转发来自:JAVA使用Gson排除特定字段 1. 忽略值为NULL 2. 使用Java关键字transient 3...

  • 2018-08-30

    java关键字 一、transient transient的作用及使用方法 如何将非静态的数据不进行序列化?用tr...

  • Java中各种关键字

    java transient 关键字与序列化Java关键字——instanceofvolatile关键字浅析Jav...

  • 不想进行序列化

    对于不想进行序列化的变量,使用transient关键字修饰。 transient关键字的作用是:阻止实例中那些用此...

  • JAVA中transient关键字的使用

    transient这个关键字,在java中大家可能遇到的不多,最近阅读JDK源码的时候看到,和大家分享一下。tra...

  • 学习笔记之transient关键字

    转载自:敏敏Alexia,Java transient关键字使用小记。 哎,虽然自己最熟的是Java,但很多Jav...

网友评论

    本文标题:JAVA中transient关键字的使用

    本文链接:https://www.haomeiwen.com/subject/fxlewttx.html