Java Transient關鍵字

1、transient關鍵字只能修飾變量,而不能修飾方法和類。
2、被transient關鍵字修飾的變量不再能被序列化,一個靜態變量不管是否被transient修飾,均不能被序列化。
3、一旦變量被transient修飾,變量將不再是對象持久化的一部分,該變量內容在序列化后無法獲得訪問。也可以認為在將持久化的對象反序列化后,被transient修飾的變量將按照普通類成員變量一樣被初始化。

package com.design.prompt;

import java.io.Serializable;

public class UserTest implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = 6522988290199824802L;
    private String username;
    transient String password;
    
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
}
package com.design.prompt;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

import org.junit.Test;

public class TransientTest {

    @Test
    public void test_transient() {
        UserTest ut = new UserTest();
        ut.setUsername("jane");
        ut.setPassword("123456");

        System.out.println("read before Serializable: ");
        System.out.println("before username: " + ut.getUsername());
        System.err.println("before password: " + ut.getPassword());
        try {
            ObjectOutputStream os = new ObjectOutputStream(
                    new FileOutputStream("C:/user.txt"));
            os.writeObject(ut); // 將User對象寫進文件
            os.flush();
            os.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            ObjectInputStream is = new ObjectInputStream(new FileInputStream(
                    "C:/user.txt"));
            ut = (UserTest) is.readObject(); // 從流中讀取User的數據
            is.close();

            System.out.println("\nread after Serializable: ");
            System.out.println("after username: " + ut.getUsername());
            System.err.println("after password: " + ut.getPassword());

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

執行結果:

before password: 123456
read before Serializable: 
before username: jane
after password: null

read after Serializable: 
after username: jane
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容