日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

Java中的瞬态关键字及其使用

發(fā)布時(shí)間:2023/12/3 java 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java中的瞬态关键字及其使用 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

最近,我在一個(gè)朋友的一個(gè)研究項(xiàng)目中遇到了十字架,他們正在學(xué)習(xí)Java編程的基礎(chǔ)知識(shí),一些忘記的敏感信息打印在文本文件中,并記住了Java中的瞬時(shí)關(guān)鍵字。

Java中的瞬時(shí)關(guān)鍵字在安全性方面起著重要作用,并且在上述類似的“事故”中非常有用,因?yàn)樗鼘⒆柚姑舾行畔⒌膫鬏?#xff0c;例如密碼到文件,JSON消息等需要序列化的信息。

長話短說,如果將任何變量定義為瞬態(tài), 除非將其定義為staticfinal ,否則它將不會(huì)序列化。

讓我們來看一些例子。

在下面的示例中,我們將定義一些瞬態(tài)變量,我們將通過將它們寫入文件,讀取它們并查看影響來序列化它們。

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

我們可以看到,標(biāo)記為瞬態(tài)的變量c在序列化后丟失了其值。

讓我們來看另一個(gè)例子。

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!

那么這里發(fā)生了什么? 為什么同時(shí)打印c和d變量? 答案是因?yàn)樗鼈儍蓚€(gè)都被標(biāo)記為靜態(tài)或最終的。

  • 靜態(tài)變量不是對(duì)象狀態(tài)的一部分,因此暫態(tài)關(guān)鍵字無法應(yīng)用。
  • 最終變量已通過其值序列化,因此瞬態(tài)不再適用。

因此,下次記住此關(guān)鍵字時(shí),您需要在序列化時(shí)有意放松的信息。

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

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的Java中的瞬态关键字及其使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。