java transient关键字使用

java语言的关键字,变量修饰符。如果用transient声明一个实例变量,当对象存储时,它的值不需要维持。换句话来说就是,用transient关键字标记的成员变量不参与序列化过程。
比如,如果一个用户有一些敏感信息(如密码,银行卡号等),为了安全起见,不希望在网络操作(主要涉及到序列化操作,本地序列化缓存也适用)中被传输,这些信息对应的变量就可以加上transient关键字。换句话说,这个字段的生命周期仅存于调用者的内存中而不会写到磁盘里持久化。
示例代码:

import java.io.*;

class TransientTest {
    public static void main(String[] args) {
        Person person = new Person("hehe", "123");
        System.out.println(person.username);
        System.out.println(person.password);
        try {
            ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream("text.txt"));
            os.writeObject(person);
            os.flush();
            os.close();
        } catch (Exception e) {

        }
        try {
            ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream("text.txt"));
            Person person1 = (Person) inputStream.readObject();
            System.out.println(person1.username);
            System.out.println(person1.password);
        } catch (Exception e) {

        }
    }
}

class Person implements Serializable {
    Person(String username, String password) {
        this.password = password;
        this.username = username;
    }

    public String username;
    public transient String password;
}

最后输出结果为
hehe
123
hehe
null

总结:
1)变量被transient修饰,则该变量内容不会被序列化保存。
2)transient关键字只能修饰变量,而不能修饰方法和类。注意,本地变量是不能被transient关键字修饰的。变量如果是用户自定义类变量,则该类需要实现Serializable接口。
3)静态成员是不能被序列化的,因为静态成员是随着类的加载而加载的,与类共存亡,并且静态成员的默认初始值都是0并且静态成员是类相关的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值