Java的serialization提供了一种持久化对象实例的机制。当持久化对象时,可能有一个特殊的对象数据成员,我们不想用serialization机制来保存它。

为了在一个特定对象的一个域上关闭serialization,可以在这个域前加上关键字transient。

当一个对象被序列化的时候,transient型变量的值不包括在序列化的表示中,然而非transient型的变量是被包括进去的。

简而言之,被transient修饰的变量不参与序列化和反序列化。

接下来用代码来证明一下。

新建一个Student类实现Serializable 接口,并重写其toString方法便于观察结果。

一个age属性不被transient修饰,一个name属性被transient修饰。

public class Student implementsSerializable {private intage;private transientString name;publicStudent() {

}public Student(intage, String name) {this.age =age;this.name =name;

}

@OverridepublicString toString() {return "Student{" + "age=" + age + ", name='" + name + '\'' + '}';

}

}

然后在TransientTest类里边测试。

PS:

为了代码简洁这里的IO操作没有进行try catch操作而是直接抛出了。

public classTestTransient {public static void main(String[] args) throwsException {//实例化一个Student对象.

Student student = new Student(15, "HuaGe");

System.out.println(student);//将student对象写入磁盘文件(序列化)

ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("student.txt"));

oos.writeObject(student);

oos.close();//从磁盘文件读取student对象(反序列化)

ObjectInputStream ois = new ObjectInputStream(new FileInputStream("student.txt"));

student=(Student) ois.readObject();

System.out.println(student);

}

}

运行main方法,观察控制台打印信息。

发现经过了序列化和反序列化后,name属性从HuaGe变为了null.

这就说明了被transient修饰的变量不参与序列化和反序列化。

那有没有例外呐?

我们知道,java中有两种序列化的方式。

1. 实现Serializable接口。

2. 实现Externalizable接口。

Externalizable接口是Serializable接口的子类

源码如下

public interface Externalizable extendsjava.io.Serializable {void writeExternal(ObjectOutput out) throwsIOException;void readExternal(ObjectInput in) throwsIOException, ClassNotFoundException;

}

这个接口的两个方法可以指定对类中的哪些属性进行序列化。

使用这个接口时,无论属性有没有被transient修饰,

默认不对任何属性进行序列化。所以实现了Externalizable接口的类

一般不再使用transient修饰属性。

总结:

1. 被transient修饰的变量不参与序列化和反序列化

2. transient一般在实现了Serializable接口的类中使用。

以上只是个人的一些理解,如果哪里不对,还请指出!

java transient作用_Java中transient关键字的作用相关推荐

  1. java static用法_Java中static关键字的作用和用法详细介绍

    static表示"全局"或者"静态"的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. 被static ...

  2. java关键字super的作用_java中super关键字的作用

    1.super关键字可以在子类的构造方法中显示地调用父类的构造方法,super()必须为子类构造函数中的第一行. 2.super可以用来访问父类的成员方法或变量,当子类成员变量或方法与父类有相同的名字 ...

  3. java finally的作用_java中finally关键字的特点和作用是什么

    java中finally关键字的特点和作用是什么 发布时间:2020-09-08 11:12:01 来源:亿速云 阅读:114 作者:小新 小编给大家分享一下java中finally关键字的特点和作用 ...

  4. java访问控制符_java中访问控制符的作用

    展开全部 java中访问控制符的作用是说明被声明的内容(类.属性.方法和构造方法)的访问权636f70793231313335323631343130323136353331333337393466限 ...

  5. java final定义_Java中final关键字的用法

    final在Java中并不常用,然而它却为我们提供了诸如在C语言中定义常量的功能,不仅如此,final还可以让你控制你的成员.方法或者是一个类是否可被覆写或继承等功能,这些特点使final在Java中 ...

  6. java this()函数_java中this关键字的三种用法

    this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针. this的用法在java中大体可以分为3种: 1.普通的直接引用,this相当于是指向当前对象本身. 2.形参与成员名字重 ...

  7. java 私有构造_JAVA中构造方法私有化的作用是什么?

    展开全部 如果构造方法是私有的,则意味着无法从除自身之62616964757a686964616fe58685e5aeb931333431363637外的任何类访问它.这是Java提供的访问控制机制. ...

  8. java abstract 变量_Java中abstract关键字详解

    abstract只能修饰类(class) 和 方法.而不能修饰成员变量.这是由于抽象的概念确定的.只有类和方法可以抽象出来,而成员变量不需要抽象. abstract修饰类 abstract之所以出现, ...

  9. java中this有什么作用_JAVA中this有什么作用?

    请看下面程序中 MyDate newDay=new MyDate(this); this是什么作用? class MyDate{ private int day; private int month; ...

最新文章

  1. 如何学会读论文?送你滑铁卢大学S. Keshav的三轮阅读法
  2. 成功解决object_detection/protos/*.proto: No such file or directory
  3. 关于寻路算法的一些思考(6):预先计算好的路径的所用空间
  4. 【洛谷 1879】玉米田
  5. navicat怎么查看数据库的url_连接数据库url怎么写
  6. [转帖]Cookies和Session的区别和理解
  7. C++笔记(2018/2/7)
  8. memcache 客户端性能对比试验
  9. js获取当前日期加上30天之后的日期
  10. Power Query 系列 (05) - M 语言介绍
  11. 使用win10远程控制ubuntu14.04(2)
  12. 免费FTP资源(比较全)
  13. Java中的角度问题,求三角函数,角度,弧度,一文足够
  14. uefi如何安装linux系统教程,UEFI启动模式下安装Ubuntu教程
  15. 4个入口8条光缆!我们这样与世界连接
  16. 产品目标拆解:结构化思维
  17. 计算机绿屏如何解决,电脑开机绿屏怎么解决_win10电脑开机就绿屏的解决方法
  18. java唱哪首歌好听_盘点四首戳爷最好听的歌曲,每一首都很经典,你最喜欢哪一首?...
  19. 八、CSS基础选择器
  20. draw.io编辑工具

热门文章

  1. [MySQL | Python] MySQL子查询及其对于的Python操作
  2. 【网络请求之Axios】axios的基础用法
  3. 捷信消金「走下神坛」
  4. LG的Optimus 2X手机回顾
  5. NVIDIA GeForce Experience登录不了解决方法[ 氵]
  6. 解决flex布局space-between最后一行布局问题超简单方法
  7. 找回旧帖:谢谢斩月,谢谢monkeycz,谢谢dtcser,谢谢超级大BUG
  8. spooling技术
  9. HTML5期末大作业:美食主题网站设计——美食主题(6页) HTML+CSS+JavaScript 学生dreamweaver网页设计作业成品
  10. 血型遗传表,怎么记忆?根本不用记忆,自己组合一下就行了。