《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

posted @ 2020-10-11 21:08  加速丨世界  阅读(237)  评论(0编辑  收藏  举报