你真的理解transient關(guān)鍵字嗎纪蜒?

前言

Java中有個(gè)關(guān)鍵字叫transient凿将,不同于static、volatile等颊埃,這個(gè)關(guān)鍵字并不常用蔬充,因此很容易忘記它的用法。這里坐下介紹班利。

作用
  1. 一般來說饥漫,當(dāng)我們使用Serilizable接口實(shí)現(xiàn)一個(gè)類時(shí),這個(gè)類就可以序列化了罗标。但有些時(shí)候庸队,對于類中的某些關(guān)鍵信息,我們并不想序列化闯割,但是又不好從這個(gè)需要序列號(hào)的類中刪除彻消,那么怎么辦呢?這個(gè)時(shí)候transient就派上用場了宙拉。
  2. transient關(guān)鍵字可以讓被修飾的變量不被序列化宾尚。注意,transient僅可以修飾變量谢澈,不可以修飾方法和類(實(shí)際上也沒必要修飾)煌贴。
  3. 對于static變量,transient修飾與不修飾效果相同澳化,因?yàn)樵撟兞渴紫葘儆赾lass,而序列號(hào)是對一個(gè)具體對象來說的稳吮,所以transient的修飾無意義缎谷。當(dāng)然修飾了也沒有什么問題。
  4. 有時(shí)候需要序列化的類中引用了第三方庫灶似,這個(gè)庫中的某個(gè)對象并沒有實(shí)現(xiàn)Seriliable接口列林,此時(shí)如果直接序列化該對象,會(huì)拋出“java.io.NotSerializableException”異常酪惭,這個(gè)時(shí)候希痴,也可以考慮使用transient關(guān)鍵字。
例子
public class TransDemo {
  public static void main(String[] args) throws IOException {
      Foo foo = new Foo();
      System.out.printf("a: %d%n", Foo.a);
      System.out.printf("b: %d%n", Foo.b);
      System.out.printf("c: %d%n", foo.c);
      System.out.printf("d: %d%n", foo.d);
     try (FileOutputStream fos = new FileOutputStream("x.ser");
              ObjectOutputStream oos = new ObjectOutputStream(fos)) {
          oos.writeObject(foo);
      }

      foo = null;

      try (FileInputStream fis = new FileInputStream("x.ser");
              ObjectInputStream ois = new ObjectInputStream(fis)) {
          System.out.println();
          foo = (Foo) ois.readObject();
          System.out.printf("a: %d%n", Foo.a);
          System.out.printf("b: %d%n", Foo.b);
          System.out.printf("c: %d%n", foo.c);
          System.out.printf("d: %d%n", foo.d);
      } catch (ClassNotFoundException cnfe) {
          System.err.println(cnfe.getMessage());
      }
  }
}

class Foo implements Serializable{
    public static int a = 1;
    public static int b = 2;
    public int c = 3;
    public transient int d = 4;
}

輸出結(jié)果:
原值:a: 1 b: 2 c: 3 d: 4
序列化:a: 1 b: 2 c: 3 d: 0
非static變量d沒有被序列化春感,序列化后的值變?yōu)榱司幾g時(shí)賦予的初始值0.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末砌创,一起剝皮案震驚了整個(gè)濱河市虏缸,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌嫩实,老刑警劉巖刽辙,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異甲献,居然都是意外死亡宰缤,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門晃洒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來慨灭,“玉大人,你說我怎么就攤上這事球及⊙踔瑁” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵桶略,是天一觀的道長语淘。 經(jīng)常有香客問我,道長际歼,這世上最難降的妖魔是什么惶翻? 我笑而不...
    開封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮鹅心,結(jié)果婚禮上吕粗,老公的妹妹穿的比我還像新娘。我一直安慰自己旭愧,他們只是感情好颅筋,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著输枯,像睡著了一般议泵。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上桃熄,一...
    開封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天先口,我揣著相機(jī)與錄音,去河邊找鬼瞳收。 笑死碉京,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的螟深。 我是一名探鬼主播谐宙,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼界弧!你這毒婦竟也來了凡蜻?” 一聲冷哼從身側(cè)響起搭综,我...
    開封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎咽瓷,沒想到半個(gè)月后设凹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡茅姜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年闪朱,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片钻洒。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡奋姿,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出素标,到底是詐尸還是另有隱情称诗,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布头遭,位于F島的核電站寓免,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏计维。R本人自食惡果不足惜袜香,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鲫惶。 院中可真熱鬧蜈首,春花似錦、人聲如沸欠母。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽赏淌。三九已至踩寇,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間六水,已是汗流浹背俺孙。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留缩擂,地道東北人鼠冕。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓添寺,卻偏偏與公主長得像胯盯,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子计露,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • JAVA序列化機(jī)制的深入研究 對象序列化的最主要的用處就是在傳遞,和保存對象(object)的時(shí)候,保證對象的完整...
    時(shí)待吾閱讀 10,863評(píng)論 0 24
  • 在介紹transient關(guān)鍵字之前首先得了解對象的序列化:一個(gè)類實(shí)現(xiàn)了 Serializable接口, 我們就可以...
    new_66b1閱讀 474評(píng)論 0 0
  • 轉(zhuǎn)載自:敏敏Alexia,Java transient關(guān)鍵字使用小記博脑。 哎憎乙,雖然自己最熟的是Java,但很多Jav...
    KwongRay閱讀 284評(píng)論 0 0
  • 1.import static是Java 5增加的功能,就是將Import類中的靜態(tài)方法叉趣,可以作為本類的靜態(tài)方法來...
    XLsn0w閱讀 1,222評(píng)論 0 2
  • 男孩帶著女友一起租房子泞边,女孩被男孩女友的紅皮鞋所吸引,這對于當(dāng)時(shí)物質(zhì)匱乏的年代來說疗杉,紅皮鞋很罕見阵谚,女孩眼里寫滿了...
    龍貓小姐姐_閱讀 155評(píng)論 0 3