Java关键字 transient

在上班无事可做时,开始试着自己去看看源码,首先接触不必多说,最为常见的Collection接口下的一些常用类。

打开ArrayList,继承抽象类AbstractList,实现List、RandomAccess、Cloneable、Serializable接口

第一个属性serialVersionUID,不必过多解释,序列化的相关属性

第二个属性elementData,Object数组类型,transient关键字修饰。

transient是什么,从来没见过,好去查一下。


查完回来:transient修饰的属性,不参与序列化,不再是对象持久化的一部分,有transient修饰的属性,类要实现Serializable接口,

下面通过代码去解释这儿

class UserInfo implements Serializable {
    private static final long serialVersionUID = 154111313L;
    private String userName;
    private transient String passWord;
    /**  
     * 获取userName  
     * @return userName userName
     */
    public String getUserName() {
        return userName;
    }
    /**  
     * 设置userName  
     * @param userName userName
     */
    public void setUserName(String userName) {
        this.userName = userName;
    }
    /**  
     * 获取passWord  
     * @return passWord passWord
     */
    public String getPassWord() {
        return passWord;
    }
    /**  
     * 设置passWord  
     * @param passWord passWord
     */
    public void setPassWord(String passWord) {
        this.passWord = passWord;
    }
}
实体类UserInfo

public static void main(String[] args) {
    UserInfo user = new UserInfo();
    user.setUserName("Daming");
    user.setPassWord("111222333");
    System.out.println(user.getUserName() + "/" + user.getPassWord());
    try {
        ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream(new File("D:/a.txt")));
        os.writeObject(user);
        os.flush();
        os.flush();
    } catch (Exception e) {
        // TODO: handle exception
    }
    try {
        ObjectInputStream oi = new ObjectInputStream(new FileInputStream(new File("D:/a.txt")));
        UserInfo userCopy = (UserInfo) oi.readObject();
        oi.close();
        System.out.println(userCopy.getUserName() +"/" + userCopy.getPassWord());
    } catch (Exception e) {
        // TODO: handle exception
    }
    
}
测试方法如上

测试结果

Daming/111222333
Daming/null
能观察到什么,UserInfo在被序列化后传入文件内,再从文件中读取时为空。我的理解是在对象转化为字节数组时该属性无法序列化,所以值为空,传入文件里也为空。

大致能得到的一个结论是,被transient修饰的属性只能在内存中存活,当对该对象进行持久化操作时,该属性无法被序列化,所以不能保存完整的属性信息。

应用:数据传输安全方面。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值