国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java transient關(guān)鍵字使用小結(jié)

2019-11-06 07:30:48
字體:
供稿:網(wǎng)友
1、transient關(guān)鍵字只能修飾變量,而不能修飾方法和類。注意,本地變量是不能被transient關(guān)鍵字修飾的。2、被transient關(guān)鍵字修飾的變量不再能被序列化,一個(gè)靜態(tài)變量不管是否被transient修飾,均不能被序列化。3、一旦變量被transient修飾,變量將不再是對象持久化的一部分,該變量內(nèi)容在序列化后無法獲得訪問。也可以認(rèn)為在將持久化的對象反序列化后,被transient修飾的變量將按照普通類成員變量一樣被初始化。如下面的例子package com.kkoolerter;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.Serializable;import java.util.Date;public class Main implements Serializable {    PRivate static final long serialVersionUID = -5836283489677344417L;    private transient int classValue = 10;    private transient Date date = new Date();    private transient static int staticValue = 10;    public static void main(String[] args) throws Exception {        Main m = new Main();        m.classValue = 11;        Main.staticValue = 11;        ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(                new File("0xjh000")));        out.writeObject(m);        out.close();        ObjectInputStream in = new ObjectInputStream(new FileInputStream(                new File("0xjh000")));        Main m1 = (Main) in.readObject();        in.close();        System.out.println(m1.classValue);        System.out.println((m1.date == null ? "date is null"                : "date is not null"));    }}程序?qū)⑤敵觯?date is null這就說明了一旦變量被transient修飾,變量將不再是對象持久化的一部分,該變量內(nèi)容在序列化后無法獲得訪問。思考一下下面的例子:package com.kkoolerter;import java.io.Externalizable;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.ObjectInput;import java.io.ObjectInputStream;import java.io.ObjectOutput;import java.io.ObjectOutputStream;public class ExternalizableTest implements Externalizable {    private transient String content = "哈哈~我將會(huì)被序列化,不管我是是否被transient關(guān)鍵字修飾";    @Override    public void writeExternal(ObjectOutput out) throws IOException {        out.writeObject(content);    }    @Override    public void readExternal(ObjectInput in) throws IOException,            ClassNotFoundException {        content = (String) in.readObject();    }    public static void main(String[] args) throws Exception {        ExternalizableTest et = new ExternalizableTest();        ObjectOutput out = new ObjectOutputStream(new FileOutputStream(                new File("ext0000")));        out.writeObject(et);        ObjectInput in = new ObjectInputStream(new FileInputStream(new File(                "ext0000")));        ExternalizableTest et1 = (ExternalizableTest) in.readObject();        System.out.println(et1.content);        out.close();        in.close();    }}程序運(yùn)行后將輸出如下結(jié)果:哈哈~我將會(huì)被序列化,不管我是是否被transient關(guān)鍵字修飾這是為什么呢,不是說類的變量被transient關(guān)鍵字修飾以后將不能序列化了嗎?我們知道在Java中,對象的序列化可以通過實(shí)現(xiàn)兩種接口來實(shí)現(xiàn),若操作的是一個(gè)Serializable對象,則所有的序列化將會(huì)自動(dòng)進(jìn)行,若操作的是 一個(gè)Externalizable對象,則沒有任何東西可以自動(dòng)序列化,需要在writeExternal方法中進(jìn)行手工指定所要序列化的變量,這與是否被transient修飾無關(guān)。因此第二個(gè)例子輸出的是變量content初始化的內(nèi)容,而不是null。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 黑龙江省| 龙州县| 新乡县| 怀安县| 肥西县| 景宁| 龙州县| 镇远县| 娱乐| 昂仁县| 孟村| 景洪市| 开鲁县| 三门峡市| 宣武区| 孝义市| 东乡| 英德市| 方正县| 新宁县| 河北省| 玛曲县| 巴林右旗| 常宁市| 弥勒县| 长武县| 常州市| 高唐县| 甘孜县| 囊谦县| 天柱县| 临安市| 丰台区| 通城县| 六安市| 思茅市| 且末县| 东丽区| 金湖县| 开化县| 敦化市|