《Java基础知识》Java transient关键字详解

本文通过一个实例介绍了Java中的transient关键字,它用于标记对象的某个属性不应被序列化。当对象被序列化并重新反序列化后,带有transient修饰的属性值将变为null。这对于保护敏感信息或实现特定逻辑很有用。

前言

在看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了。


 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值