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

歡迎訪問(wèn) 生活随笔!

生活随笔

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

java

【Java】浅谈关键词transient的使用

發(fā)布時(shí)間:2025/3/15 java 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Java】浅谈关键词transient的使用 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

說(shuō)明

本文的路徑被我刪了部分,所以復(fù)制代碼的話要注意自己寫(xiě)好文件的path。

控制序列化IO的類(lèi)

import java.io.*;public class PersonMapper {private PersonMapper() {}private static PersonMapper mapper;/*** 獲取單例* @return 單例*/public static PersonMapper getInstance() {if (mapper == null) {mapper = new PersonMapper();}return mapper;}/*** 反序列化從文件中讀取Person的序列化對(duì)象*/public Person readObject() {try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("src/com/.../test/serialPerson.dat"))) {Person obj = (Person)ois.readObject();return obj;} catch (IOException | ClassNotFoundException e) {e.printStackTrace();}return null;}/*** 序列化對(duì)象*/public void writeObject(Person object) {try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("src/com/.../test/serialPerson.dat"))) {oos.writeObject(object);} catch (IOException e) {e.printStackTrace();}}}

測(cè)試類(lèi)

public class TransientTest {public static void main(String[] args) {Person person = new Person(1, "Tim", 10);PersonMapper mapper = PersonMapper.getInstance();mapper.writeObject(person);System.out.println(mapper.readObject());} }

使用transient的Person類(lèi)

注意實(shí)現(xiàn) java.io.Serializable,并寫(xiě)一下serialVersionUID。

注意 transient !!!

public class Person implements Serializable {private static final long serialVersionUID = 1L;private Integer id;private String name;private transient Integer age;public Person(Integer id, String name, Integer age) {this.id = id;this.name = name;this.age = age;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}@Overridepublic String toString() {return "Person{" + "id=" + id + ", name='" + name + '\'' + ", age=" + age + '}';}}

測(cè)試結(jié)果:

Person{id=1, name='Tim', age=null}

去掉transient的Person類(lèi)

只刪去 transient:

public class Person implements Serializable {private static final long serialVersionUID = 1L;private Integer id;private String name;private Integer age;public Person(Integer id, String name, Integer age) {this.id = id;this.name = name;this.age = age;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}@Overridepublic String toString() {return "Person{" + "id=" + id + ", name='" + name + '\'' + ", age=" + age + '}';}}

測(cè)試結(jié)果:

Person{id=1, name='Tim', age=10}

結(jié)論

Java沒(méi)有把對(duì)象被transient標(biāo)記的屬性序列化。

薦讀

  • Java transient關(guān)鍵字使用示例
  • Java transient關(guān)鍵字使用小記

Update on 2020.3.7

  • transient修飾的屬性不進(jìn)行序列化的操作,起到一定消息屏蔽 的效果
  • 被transient修飾的屬性可以正確的創(chuàng)建,但被系統(tǒng)賦為默認(rèn)值。
    比如,int類(lèi)型為0,String類(lèi)型為null

注:ObjectInputStream和ObjectOutputStream類(lèi)不會(huì)保存和 讀寫(xiě)對(duì)象中的transient和static類(lèi)型的成員變量

總結(jié)

以上是生活随笔為你收集整理的【Java】浅谈关键词transient的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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