最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java中transient關(guān)鍵字用法分析

 更新時(shí)間:2015年02月04日 11:41:29   作者:Benjamin_whx  
這篇文章主要介紹了java中transient關(guān)鍵字用法,以實(shí)例形式分析了java中transient關(guān)鍵字的功能及使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下

本文實(shí)例分析了java中transient關(guān)鍵字用法。分享給大家供大家參考。具體分析如下:

java有個(gè)特點(diǎn)就是序列化,簡單地來說就是可以將這個(gè)類存儲在物理空間(當(dāng)然還是以文件的形式存在),那么當(dāng)你從本地還原這個(gè)文件時(shí),你可以將它轉(zhuǎn)換為它本身。這可以極大地方便網(wǎng)絡(luò)上的一些操作,但同時(shí),因?yàn)樯婕暗桨踩珕栴},所以并不希望把類里面所有的東西都能存儲(因?yàn)槟菢?,別人可以通過序列化知道類里面的內(nèi)容),那么我們就可以用上transient這個(gè)關(guān)鍵字,它的意思是臨時(shí)的,即不會隨類一起序列化到本地,所以當(dāng)還原后,這個(gè)關(guān)鍵字定義的變量也就不再存在。

通常,我們寫的程序都要求特定信息能持久存在或保存到磁盤上,以供一個(gè)程序使用或用在同一個(gè)程序的另一次運(yùn)行上.這種持久性可以通過幾種方式來實(shí)現(xiàn),包括寫到數(shù)據(jù)庫中或是利用JAVA為對象序列化提供的支持.不管我們選用什么方法,類實(shí)例的持久性都是通過保存類的域的狀態(tài)來完成的,保存這些狀態(tài),以便以后可以對它們進(jìn)行訪問或使用它們來創(chuàng)建相同的實(shí)例.然而,有可能并不是所有的域都需要被保存起來.當(dāng)一個(gè)實(shí)例被持久化時(shí),其內(nèi)部的一些域卻不需要持久化,則可以用trainsient修飾符告訴編譯器指定的域不需要被持久保存.
 
首先,讓我們看一些Java serialization的代碼:

public class LoggingInfo implements java.io.Serializable 
{ 
  private Date loggingDate = new Date(); 
  private String uid; 
  private transient String pwd; 
  
  LoggingInfo(String user, String password) 
  { 
    uid = user; 
    pwd = password; 
  } 
  public String toString() 
  { 
    String password=null; 
    if(pwd == null) 
    { 
    password = "NOT SET"; 
    } 
    else 
    { 
      password = pwd; 
    } 
    return "logon info: /n  " + "user: " + uid + 
      "/n  logging date : " + loggingDate.toString() + 
      "/n  password: " + password; 
  } 
}

現(xiàn)在我們創(chuàng)建一個(gè)這個(gè)類的實(shí)例,并且串行化(serialize)它 ,然后將這個(gè)串行化對象寫如磁盤。

LoggingInfo logInfo = new LoggingInfo("MIKE", "MECHANICS"); 
System.out.println(logInfo.toString()); 
try 
{ 
  ObjectOutputStream o = new ObjectOutputStream( 
        new FileOutputStream("logInfo.out")); 
  o.writeObject(logInfo); 
  o.close(); 
} 
catch(Exception e) {//deal with exception}
To read the object back, we can write 

try 
{ 
  ObjectInputStream in =new ObjectInputStream( 
        new FileInputStream("logInfo.out")); 
  LoggingInfo logInfo = (LoggingInfo)in.readObject(); 
  System.out.println(logInfo.toString()); 
} 
catch(Exception e) {//deal with exception}

如果我們運(yùn)行這段代碼,我們會注意到從磁盤中讀回(read——back (de-serializing))的對象打印password為"NOT SET"。這是當(dāng)我們定義pwd域?yàn)閠ransient時(shí),所期望的正確結(jié)果。

現(xiàn)在,讓我們來看一下粗心對待transient域可能引起的潛在問題。假設(shè)我們修改了類定義,提供給transient域一個(gè)默認(rèn)值,代碼如下:

public class GuestLoggingInfo implements java.io.Serializable 
{ 
  private Date loggingDate = new Date(); 
  private String uid; 
  private transient String pwd; 
  
  GuestLoggingInfo() 
  { 
    uid = "guest"; 
    pwd = "guest"; 
  } 
  public String toString() 
  { 
    //same as above 
   } 
}

現(xiàn)在,如果我們穿行化GuestLoggingInfo的一個(gè)實(shí)例,將它寫入磁盤,并且再將它從磁盤中讀出,我們?nèi)匀豢吹阶x回的對象打印password 為 "NOT SET"。
當(dāng)從磁盤中讀出某個(gè)類的實(shí)例時(shí),實(shí)際上并不會執(zhí)行這個(gè)類的構(gòu)造函數(shù),
而是載入了一個(gè)該類對象的持久化狀態(tài),并將這個(gè)狀態(tài)賦值給該類的另一個(gè)對象。

希望本文所述對大家的Java程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • SpringBoot3-WebClient配置與使用詳解

    SpringBoot3-WebClient配置與使用詳解

    WebClient是Spring 5引入的響應(yīng)式Web客戶端,用于執(zhí)行HTTP請求,相比傳統(tǒng)的RestTemplate,WebClient提供了非阻塞、響應(yīng)式的方式來處理HTTP請求,是Spring推薦的新一代HTTP客戶端工具,本文將詳細(xì)介紹如何在SpringBoot 3.x中配置和使用WebClient,一起看看吧
    2024-12-12
  • Java的注解原理詳解

    Java的注解原理詳解

    這篇文章主要介紹了Java的注解原理詳解,注解是JDK1.5引入的新特性,包含在java.lang.annotation包中,它是附加在代碼中的一些元信息,將一個(gè)類的外部信息與內(nèi)部成員聯(lián)系起來,在編 譯、運(yùn)行時(shí)進(jìn)行解析和使用,需要的朋友可以參考下
    2023-10-10
  • IDEA源碼修改器JarEditor使用(反編譯-打包一步到位)

    IDEA源碼修改器JarEditor使用(反編譯-打包一步到位)

    JarEditor是一個(gè)IDEA插件,用于修改jar包中的類文件,它允許用戶在不解壓jar包的情況下,直接在IDEA中編輯和修改類文件的源碼,修改完成后,可以一鍵編譯并生成新的jar包,替換原jar包
    2025-01-01
  • 重新實(shí)現(xiàn)hashCode()方法

    重新實(shí)現(xiàn)hashCode()方法

    hashCode()是Java中的一個(gè)重要方法,用于計(jì)算對象的哈希碼。本文介紹了如何重新實(shí)現(xiàn)hashCode()方法,包括使用對象的屬性計(jì)算哈希碼、使用字符串拼接計(jì)算哈希碼、使用隨機(jī)數(shù)計(jì)算哈希碼等方法。同時(shí),還介紹了如何避免哈希沖突,提高哈希表的效率。
    2023-04-04
  • 基于resty orm的ActiveRecord操作數(shù)據(jù)指南

    基于resty orm的ActiveRecord操作數(shù)據(jù)指南

    這篇文章主要為大家介紹了基于resty orm的ActiveRecord操作數(shù)據(jù)指南,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-03-03
  • java中&和&&的基本區(qū)別與常見的誤用

    java中&和&&的基本區(qū)別與常見的誤用

    &?和&&是Java中用于邏輯運(yùn)算的兩個(gè)運(yùn)算符,&是按位與和邏輯與兼用的運(yùn)算符,而&&僅用于邏輯與運(yùn)算,并具有短路特性,這篇文章主要介紹了java中&和&&的基本區(qū)別與常見的誤用,需要的朋友可以參考下
    2025-02-02
  • Spring中@Configuration注解的使用場景

    Spring中@Configuration注解的使用場景

    這篇文章主要介紹了Spring中@Configuration注解的使用場景,@Configuration注解是從Spring?3.0版本開始加入的一個(gè)使Spring能夠支持注解驅(qū)動開發(fā)的標(biāo)注型注解,主要用于標(biāo)注在類上,需要的朋友可以參考下
    2023-11-11
  • Java中classpath講解及使用方式

    Java中classpath講解及使用方式

    本文詳細(xì)講解了Java中classpath講解及使用方式,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-12-12
  • Java的RocketMQ之消息存儲和查詢原理詳解

    Java的RocketMQ之消息存儲和查詢原理詳解

    這篇文章主要介紹了Java的RocketMQ之消息存儲和查詢原理詳解,一臺Broker服務(wù)器只有一個(gè)CommitLog文件(組),RocketMQ會將所有主題的消息存儲在同一個(gè)文件中,這個(gè)文件中就存儲著一條條Message,每條Message都會按照順序?qū)懭?需要的朋友可以參考下
    2024-01-01
  • java中如何對arrayList按數(shù)字大小逆序排序

    java中如何對arrayList按數(shù)字大小逆序排序

    這篇文章主要介紹了java中如何對arrayList按數(shù)字大小逆序排序問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04

最新評論

沁源县| 巴青县| 离岛区| 平罗县| 历史| 尉犁县| 全南县| 北票市| 汉阴县| 珠海市| 临高县| 老河口市| 容城县| 常德市| 门源| 子洲县| 澄江县| 张家界市| 凤山县| 时尚| 永嘉县| 贵定县| 邵阳县| 文昌市| 普兰店市| 绍兴县| 都江堰市| 呼玛县| 潼关县| 东台市| 中方县| 安康市| 松原市| 汽车| 凭祥市| 滕州市| 宿迁市| 鲁山县| 泽州县| 龙山县| 名山县|