首页 > 其他分享 >什么是serialVersionUID,为什么我应该使用它?

什么是serialVersionUID,为什么我应该使用它?

时间:2023-10-28 19:11:06浏览次数:33  
标签:为什么 序列化 long 编译器 显式 应该 声明 serialVersionUID

内容来自 DOC https://q.houxu6.top/?s=什么是serialVersionUID,为什么我应该使用它?

Eclipse 在缺少 serialVersionUID 时会发出警告。

可序列化的类 Foo 没有声明一个类型为 long 的静态最终 serialVersionUID 字段。

serialVersionUID 是什么,为什么它很重要?请举一个缺少 serialVersionUID 会导致问题的例子。


java.io.Serializable 的文档可能是你能获得的最好的解释:

序列化运行时会为每个可序列化的类分配一个版本号,称为 serialVersionUID,在反序列化期间用于验证序列化对象的发送者和接收者是否已为该对象加载了与序列化相关的兼容类。如果接收者为该对象加载了一个与发送者的类具有不同的 serialVersionUID 的类,则反序列化将导致
InvalidClassException。一个可序列化的类可以通过声明一个名为 serialVersionUID 的字段来显式指定其自己的 serialVersionUID,该字段必须是静态的、最终的,并且类型为 long

ANY-ACCESS-MODIFIER static final long serialVersionUID = 42L;

如果一个可序列化的类没有明确声明 serialVersionUID,则序列化运行时将为该类计算默认的 serialVersionUID 值,具体方式如 Java(TM) 对象序列化规范中所述。然而,强烈建议所有可序列化的类显式声明 serialVersionUID 值,因为默认的 serialVersionUID 计算对可能因编译器实现而有所不同的类细节非常敏感,并可能在反序列化期间导致意外的 InvalidClassExceptions。因此,为了在不同的 java 编译器实现之间保证一致的 serialVersionUID 值,一个可序列化的类必须声明一个显式的 serialVersionUID 值。还强烈建议显式的 serialVersionUID 声明尽可能使用 private 修饰符,因为这些声明仅适用于立即声明的类——serialVersionUID 字段不适用于继承的成员。

标签:为什么,序列化,long,编译器,显式,应该,声明,serialVersionUID
From: https://www.cnblogs.com/xiaomandujia/p/17794484.html

相关文章

  • 为什么Spring和IDEA不推荐使用@Autowired注解,有哪些替代方案?
    引言在使用Spring框架和JetBrainsIDEA集成开发环境(IDE)进行Java开发时,你可能经常会遇到@Autowired注解。@Autowired是Spring框架中用于实现依赖注入的核心注解之一。然而,近年来,Spring和IDEA都不再推荐使用@Autowired注解,并提出了更好的替代方案。本文将详细分析为什么Spring和IDE......
  • vue中使用axios请求post接口为什么先发起OPTIONS请求再发起post请求?
    在使用Axios进行跨域POST请求时,浏览器会先发起一个OPTIONS请求,这是因为浏览器执行了跨域请求时的预检请求(PreflightRequest)。这是一个安全性措施,旨在确保跨域请求不会导致安全风险。1、跨域请求的安全性:当前端应用和后端API位于不同的域或端口时,浏览器会执行同源策略,以防止跨站点......
  • Java基础 Java 为什么非要在 锁对象身上调用 wait()方法 和 notifyAll()方法
    在Java中,wait()和notify()方法必须在同步块或同步方法内部使用,通常在锁对象上调用,有以下原因:1.互斥性:当你在同步块内部使用wait()和notify()方法时,它们与锁对象紧密相关,确保在调用wait()和notify()时能够维持互斥性。这意味着在调用wait()时,当前线程会释放锁,而在调用notify()时,......
  • 为什么要进行脉冲压缩
    今天简单聊一聊脉冲压缩,大家可能都知道雷达一般都要进行脉冲压缩,但在没有看下面这些信息之前,我觉得其实发射峰值高的脉冲信号也不是不行,不一样也能提高探测能力同时还有一个良好的距离分辨率吗?然而好像并不是这么回事,具体是什么呢?先卖个关子,大家一起往下看。首先雷达工作......
  • 实现 Angular Lazy loading 时应该避免 Static Imports 的原因
    在Angular应用开发中,Lazyloading(懒加载)是一种常用的优化技术,通过Codesplitting(代码拆分)实现。然而,在实现过程中,开发者往往会遇到一些常见的问题。本文将详细介绍在实现AngularLazyloading时应该避免的错误,并提供实际的示例进行说明。避免Lazy-Loaded代码的静态导入......
  • 为什么要使用虚拟头结点(哑结点)?
    1.总结在对链表进行操作时,一种常用的技巧是添加一个哑节点(dummynode),它的next指针指向链表的头节点。这样一来,我们就不需要对头节点进行特殊的判断了。例如,如果我们要删除节点y,我们需要知道节点y的前驱节点x,并将x的指针指向y的后继节点。但由于头节点不存在前驱节点,......
  • 理解Postgres的IOPS:为什么数据即使都在内存,IOPS也非常重要
    理解Postgres的IOPS:为什么数据即使都在内存,IOPS也非常重要磁盘IOPS(每秒输入/输出操作数)是衡量磁盘系统性能的关键指标。代表每秒可以执行的读写操作数量。对于严重依赖于磁盘访问的PG来说,了解和优化磁盘IOPS对实现最佳性能至关重要。本文讨论IOPS相关主题:IOPS是什么、如何影响PG、......
  • 为什么要学音视频?
    来源:来自Twitter-X2Rtc一直都在说“科技改变生活”,现实告诉我们这是真的。随着通信技术和5G技术的不断发展和普及,不仅拉近了人与人之间的距离,还拉近了人与物,物与物之间的距离,万物互联也变得触手可及。基于此背景下,音视频技术也成为了主流,与此同时,便催生出了大量的音视频需求,但目前......
  • 敏捷or瀑布: Salesforce项目应该选哪一个?
    在项目管理方法和框架不断扩展的世界中,敏捷和瀑布是两种最著名的项目管理方法。它们在Salesforce实施中都很流行,但各自适合不同类型的项目。选择正确的方法将直接影响到项目的预算、日程安排和有效执行,对Salesforce项目的成功至关重要。敏捷和瀑布的定义01敏捷模型敏捷将项......
  • 中小型企业选择CRM系统时应该注意哪些?
      如今市面上充斥着各种各样的CRM客户管理系统,尽管功能说的天花乱坠,中小企业选型时还是应该以自身需求为主。下面是中小企业选型CRM系统的几个要点,大家可以根据以下需求来筛选。1、明确自身需求决定企业选择哪一个CRM系统的前提应是需求。要明确需要使用CRM系统满足当下的......