【Java】浅谈关键词transient的使用
生活随笔
收集整理的這篇文章主要介紹了
【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)題。
- 上一篇: 【C语言】使用指针得到数组的最后一个数
- 下一篇: 【Java】获取并打印当前堆栈的方法