Java知识小结之Serializable

Serializable是java中实现对象序列化与反序列化的方式之一,使用方式非常简单,只要在在类声明时实现Serializable接口就可以。但实际开发使用过程中,还有一些要点需要注意:

1.合理设置*serialVersionUID*

在实现Serializable接口后,IDE会提示我们设置该类的*serialVersionUID*,虽然我们经常设置为默认值1L,甚至不去设置,发现在开始使用并没有什么问题,但是这为以后的维护埋下了隐患,serialVersionUID在我们进行序列化时会被设置到保存的文件中去,当下次进行反序列化时,系统就会将文件中的serialVersionUID与类中的serialVersionUID进行对比,只用当两者相同时,才会被正确的反序列化。如果我们在后期的维护过程中,对原来的类中的成员变量进行了修改或删除,并且原先并没有设置serialVersionUID,此时系统会对修改后的类进行计算其hash值,从而造成与原先写入文件时的serialVersionUID不同,导致反序列化失败。相反,如果我们之前设置了serialVersionUID,即使后期类中的部分成员变量发生了改动,那么反序列化仍会成功,会最大限度的恢复数据。

2.注意static关键字

对于类中有static修饰的成员变量,我们称之为静态变量,实现Serializable接口类中的静态变量无法实现序列化。由于静态变量是属于类的而不是对象,而序列化主要是对对象中的变量数据进行的一种操作,所以无法序列化静态变量。

3.学会使用transient关键字

在类中的非静态成员变量中,往往会有许多非常重要的属性,比如设计用户账户信息时的密码,我们并不希望在进行序列化过程中将该属性信息存入磁盘中,因此可以在该成员变量前加上transient关键字,这样序列化过程中就不会对该变量进行序列化存储,同理反序列化过程中也不会得到该属性值。当然,transient不能修饰方法和类。

注意:如果该类实现的是Externalizable接口,那么此时transient将不会起作用。

4.如果成员变量为自定义类对象,则该类也应实现Serializable接口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值