关于javabean显式UID的作用


如果一个javabean实现了Serializable接口,那么它可以实现序列化,也就有了网络传输、本地存储等功能。在这个类中经常会看到一个SerialVersionUID,它的作用是这样的:

首先,实现序列化的类中如果没有显式声明SerialVersionUID,这个类在编译时,编译器会生成一个唯一的,隐式的UID,这个UID是由很多因素决定的,包括类的非私有方法和属性等,那么当这个类做了一些改动,比如说增加了一个属性,那么再次编译时,隐式UID会改变。也就是说,隐式的UID标示了类的一个版本。在数据传输过程中,JVM在反序列化操作时,如果发现反序列化的类的隐式UID和数据流中的类隐式UID不同,会认为这个类版本发生了改变,将抛出InvalidClassException异常。

那么,如果一个类的改动并不大,但仍然想正常地进行反序列化,该如何呢?答案是显示地规定一个SerialVersionUID,当类做了改动,但SerialVersionUID不变,JVM在反序列化时,会认为数据流中的类和本地的这个类仍属于同一版本,那么反序列化是可以进行的,这样会增加程序的健壮性。

所以,当一个类实现了序列化接口时,最好显式地声明一个UID,这样可以避免一些不必要的问题。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值