乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      java關(guān)鍵字Transient

       昵稱5370487 2011-01-27

      Java 的serialization提供了一種持久化對象實例的機(jī)制。當(dāng)持久化對象時,可能有一個特殊的對象數(shù)據(jù)成員,我們不想用serialization機(jī)制來保存它。為了在一個特定對象的一個域上關(guān)閉serialization,可以在這個域前加上關(guān)鍵字transient。

      transient是Java語言的關(guān)鍵字,用來表示一個域不是該對象串行化的一部分。當(dāng)一個對象被串行化的時候,transient型變量的值不包括在串行化的表示中,然而非transient型的變量是被包括進(jìn)去的。

      首先,讓我們看一些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)建一個這個類的實例,并且串行化(serialize)它 ,然后將這個串行化對象寫入磁盤。

      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}

      如果我們運行這段代碼,我們會注意到從磁盤中讀回(read——back (de-serializing))的對象打印password為"NOT SET"。這是當(dāng)我們定義pwd域為transient時,所期望的正確結(jié)果。
      現(xiàn)在,讓我們來看一下粗心對待transient域可能引起的潛在問題。假設(shè)我們修改了類定義,提供給transient域一個默認(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的一個實例,將它寫入磁盤,并且再將它從磁盤中讀出,我們?nèi)匀豢吹阶x回的對象打印password 為 "NOT SET"。當(dāng)從磁盤中讀出某個類的實例時,實際上并不會執(zhí)行這個類的構(gòu)造函數(shù),而是載入了一個該類對象的持久化狀態(tài),并將這個狀態(tài)賦值給該類的另一個對象。

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多