影响序列化的两个关键字:transient 和 static

transient:这个关键字的作用就是忽略序列化操作,也就是说,当对象中的某个属性被加上了这个关键字后,这个属性就不会被序列化。这个就不在给出代码了,自己可以去尝试一下,int类型的变量被加上这个关键字后,你反序列化得到的结果是0,String的话得到的是null。这个就不过多的解释了。

static:静态,这个要重点说说。静态的变量不属于对象,而是所有类共享的。所以,static变量也不能被序列化。好了,可以去尝试一下了,试着把前面的Student的一个属性变成静态的,然后运行一遍,你会发现,并没有被序列化。奇怪,怎么会这样呢?肯定又骗我了。因为编译器是肯定不会骗我的,哈哈。老夫怎么会骗你们呢?对吧。这里说的序列化是指序列化信息中不包含静态成员域。为什么上面这个可以测试成功呢?因为你是在同一个虚拟机里面,也就是在同一个进程里面,这个静态的域事先已经被加载进去了,所以是可以正常获取的,没错,就是这道理。那该怎么测试呢?很简单,你就新建一个测试类,把上面那个例子中的反序列化方法copy到另一个测试类中,先第一个类中运行一下序列化方法,然后再另一个测试类中运行一个反序列化方法你就会发现,反序列化出来的结果中,static的静态域是没有被序列化的。(或者你在运行完序列化方法后把eclipse关掉,然后打开后运行反序列化方法也可以。)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值