《Java基礎知識》Java transient關鍵字詳解

前言

在看ArrayList源碼的時候遇到了關鍵字“transient”,可憐的我居然沒有遇到過這個關鍵字,那沒有辦法只好去找資料瞭解一下它的功能。

功能說明

先看一個案例

public class User implements Serializable {
    private static final long serialVersionUID = 8294180014912103005L;

    private String username;

    /**
     * passwd字段加上了transient關鍵字,我們就可以看到效果
     */
    private transient String passwd;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPasswd() {
        return passwd;
    }

    public void setPasswd(String passwd) {
        this.passwd = passwd;
    }

    @Override
    public String toString() {
        return "User{" +
                "username='" + username + '\'' +
                ", passwd='" + passwd + '\'' +
                '}';
    }
}
public class TransientTest {
    public static void main(String[] args) {
        User user = new User();
        user.setUsername("Alexia");
        user.setPasswd("123456");

        System.out.println("user: " + user.toString());

        try{
            File file = new File("src\\demo\\knowledgepoints\\transients\\foo.txt");
            //把對象信息寫入文件中。
            ObjectOutputStream oout = new ObjectOutputStream (new FileOutputStream(file));
            oout.writeObject(user);
            oout.close();
            System.out.println("-----------------序列化前後對比-----------------");
            //把對象信息從文件中獲取出來。
            ObjectInputStream oin = new ObjectInputStream(new FileInputStream(file));
            User newUser = (User)oin.readObject(); // 沒有強制轉換到Person類型
            oin.close();
            System.out.println("newUser: " + newUser.toString());
        }catch(Exception ex){
            ex.printStackTrace();
        }
    }
}

運行效果:

我們可以看到,反序列化出來的對象,passwd的值爲null了。

總結

transient關鍵字可以讓通過接口Serializable實現的序列化和反序列化屏蔽賦值。 

參考:https://www.cnblogs.com/lanxuezaipiao/p/3369962.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章