fluent瞬态

最近,我在一个朋友的一个研究项目中遇到了一个十字架,他们正在学习Java编程的基础知识,其中一些被遗忘的敏感信息打印在文本文件中,并记住了Java中的瞬时关键字。

Java中的瞬时关键字在安全性方面起着重要作用,并且在上述类似的“事故”中非常有用,因为它将阻止敏感信息的传输,例如密码到文件,JSON消息等需要序列化的信息。

简而言之,如果将任何变量定义为瞬态, 除非将其定义为staticfinal ,否则它将不会序列化。

让我们看下面的例子。

在下面的示例中,我们将定义一些瞬态变量,我们将通过将它们写入文件,读取它们并查看影响来序列化它们。

import java.io.*;
public class TestTransient implements Serializable
{ // Normal variables String a = "JCG";String b = "IS"; // Transient variables transient String c = "GREAT"; public static void main(String[] args) throws Exception { TestTransient foo = new TestTransient(); System.out.println("a before = " + foo.a); System.out.println("b before  = " + foo.b); System.out.println("c before = " + foo.c); System.out.println("---------------------"); // serialization FileOutputStream fileOutputStream = new FileOutputStream("abc.txt"); ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream); objectOutputStream.writeObject(foo); // de-serialization FileInputStream fileInputStream = new FileInputStream("abc.txt"); ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream); TestTransient output = (TestTransient) objectInputStream.readObject(); System.out.println("a from file  = " + output.a); System.out.println("b from file  = " + output.b); System.out.println("c from file = " + output.c); }
}

输出为:

a before = JCG
b before  = IS
c before = GREAT
-----------------------
a from file  = JCG
b from file  = IS
c from file = null

我们可以看到,标记为瞬态的变量c在序列化后丢失了其值。

让我们来看另一个例子。

import java.io.*;
public class TestTransient implements Serializable
{ // Normal variables String a = "JCG";String b = "IS"; // Transient variables transient static String c = "GREAT"; transient final String d = "AGAIN!"; public static void main(String[] args) throws Exception { TestTransient foo = new TestTransient(); System.out.println("a before = " + foo.a); System.out.println("b before  = " + foo.b); System.out.println("c before = " + foo.c); System.out.println("d before = " + foo.d); System.out.println("---------------------"); // serialization FileOutputStream fileOutputStream = new FileOutputStream("abc.txt"); ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream); objectOutputStream.writeObject(foo); // de-serialization FileInputStream fileInputStream = new FileInputStream("abc.txt"); ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream); TestTransient output = (TestTransient) objectInputStream.readObject(); System.out.println("a from file  = " + output.a); System.out.println("b from file  = " + output.b); System.out.println("c from file = " + output.c); System.out.println("d from file = " + output.d); }
}

输出为:

a before = JCGb before  = ISc before = GREATd before = AGAIN!
------------------------a from file  = JCGb from file  = ISc from file = GREATd from file = AGAIN!

那么这里发生了什么? 为什么同时打印c和d变量? 答案是因为它们都被标记为静态或最终标记。

  • 静态变量不是对象状态的一部分,因此暂态关键字无法应用。
  • 最终变量已通过其值序列化,因此瞬态不再适用。

因此,下次记住该关键字时,您需要在序列化时有意放松的信息。

翻译自: https://www.javacodegeeks.com/2019/06/transient-keyword-in-java.html

fluent瞬态

fluent瞬态_Java中的瞬态关键字及其使用相关推荐

  1. java transient 关键字_java中的transient关键字详解

    前言 说实话学了一段时间java的朋友对于transient这个关键字依旧很陌生基本没怎么用过,但是transient关键字在java中却起到了不可或缺的地位!如果要说讲到,我觉得最可能出现的地方是I ...

  2. java修饰类的关键字_JAVA中的修饰关键字

    今天我们来说说JAVA中的修饰关键字. 常用的有: 1.final 关键字 修饰成员变量:a. 必须初始化值. b. 被fianl修饰的成员变量赋值,有两种方式:1.直接赋值 2.全部在构造方法中赋初 ...

  3. JAVA中的this怎么理解_Java中的this关键字怎么理解?

    一.this关键字主要有三个应用: (1)this调用本类中的属性,也就是类中的成员变量: (2)this调用本类中的其他方法: (3)this调用本类中的其他构造方法,调用时要放在构造方法的首行. ...

  4. java 中特殊的_Java中一些特殊关键字

    transient 被transient修饰的成员变量,在序列化的时候其值会被忽略,在被反序列化后, transient 变量的值被设为初始值, 如 int 型的是 0,对象型的是 null. ins ...

  5. java中default关键字_Java 中的 default 关键字及代码示例

    本文通过代码示例介绍如何在 Java 中使用 default 关键字. 基本上,有 3 个地方可以使用 Java 中的 default 关键字: 在 switch case 语句中指定默认值 在 Ja ...

  6. java异常类关键字_Java中的异常处理关键字是什么?

    java异常处理中使用了四个关键字. throw:有时我们明确要创建异常对象然后抛出它来停止程序的正常处理.throw关键字用于向运行时抛出异常来处理它. throws:当我们在方法中抛出任何已检查的 ...

  7. 什么是java的关键字_java中常见的关键字

    什么是关键字呢? 概述:关键字就是在java语言中赋予特殊含义的单词 特点:1.组成的关键字的单词全是小写 2.常见的代码编辑器中,对关键字都有特殊的颜色标记 比如在idea中对关键字都有特殊的颜色标 ...

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

    java中的finally关键字有什么特点和作用 finally关键字有什么特点? 被finally控制的语句体一定会执行. (视频教程推荐:java课程) 特殊情况:在执行到finally之前jvm ...

  9. java static关键字的作用是什么_java中的static关键字

    一.static代表着什么 在Java中并不存在全局变量的概念,但是我们可以通过static来实现一个"伪全局"的概念,在Java中static表示"全局"或者 ...

最新文章

  1. 化浆池是什么东西_头次见聪明人在阳台上砌洗衣池,开始被人笑话,装完都跟着学...
  2. 找不到或无法加载主类
  3. 空格替换_O(n)方法
  4. codeblocks快捷键(转载)
  5. 信息学奥赛一本通 提高篇 第一部分 基础算法 第2章 二分与三分
  6. MySQL入门之PHP的MySQL数据库编程
  7. python爬虫中文乱码_Python爬虫处理抓取数据中文乱码问题
  8. puppet 3+Unicorn+Nginx安装配置
  9. 两种数据仓库分层实例
  10. python123用户登录的三次机会_用户登录三次机会(PYTHON)
  11. EasyUI Datagrid换页不清出勾选方法
  12. cad2010多个文件并排显示_CAD2010中如何将多个文档并排显示在一个窗口里?
  13. Android:微信(二):解决问题
  14. iOS音频掌柜-- AVAudioSession
  15. layui怎么设置select默认选中,修改回显
  16. 李彦宏PK马云:后发制人与厚积博发
  17. 可行性分析(研究方法、技术路线、实验手段、关键技术)、学位论文研究的工作条件
  18. 爬取京东商城中的书籍信息
  19. Wireshark lua 插件提取PCAP报文中文件,图片,视频
  20. 全球自然奇迹Top50,中国上榜了3个

热门文章

  1. [2020-11-30 contest]数列(矩阵加速),秘密通道(dijkstra最短路)小X游世界树(换根dp),划分(数学)
  2. 洛谷P1912:诗人小G(二分栈、决策单调性)
  3. YBTOJ:放置棋子(费用流)
  4. 欢乐纪中A组赛【2019.8.9】
  5. 第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(昆明) AC(带悔贪心)
  6. codeforces1457 C. Bouncing Ball
  7. 【枚举】连续自然数和(jzoj 2102)
  8. HDU5874 - Friends and Enemies
  9. 组合数学与数论函数专题
  10. P2468 [SDOI2010]粟粟的书架 动态规划,主席树,二分答案