Java 中的 serialVersionUID 是用来干什么的

2024-01-08 15:32

本文主要是介绍Java 中的 serialVersionUID 是用来干什么的,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1 概述

在很多实现接口 Serializable 的类中,我们都能看到 private static final long serialVersionUID,他有什么用呢?

如下代码,如果在 A 场景中代码如下

public class UserDTO  implements Serializable {private static final long serialVersionUID = 1L;private String username;private String password;... ...
}

如下代码,如果在 B 场景中代码如下

public class UserDTO  implements Serializable {private static final long serialVersionUID = 1L;private String username;private String password;private String nickname... ...
}

B 场景比 A场景多出一个 nickname 字段,这个时候 serialVersionUID 的值是否相同

如果 UseDTO 在不同场景中使用,

1 用途

用来区分不同版本类的版本是否一致

2 生成方式

2.1 默认生成

 private static final long serialVersionUID = 1L;

2.2 根据类名等生成

根据类名、接口名、成员方法及属性等来生成一个64位的哈希字段。

 private static final long serialVersionUID = -1060216618475607933L;

2.3 不提供 serialVersionUID

有的时候没有提供任何 serialVersionUID 的定义,Java序列化机制会根据编译的 class (它通过类名,方法名等诸多因素经过计算而得,理论上是一一映射的关系,也就是唯一的)自动生成一个 serialVersionUID 作序列化版本比较用,这种情况下,如果 class 文件(类名,方法明等)没有发生变化(增加空格,换行,增加注释,等等),就算再编译多次,serialVersionUID 也不会变化的.

3 何时使用

例如实体类 UserDTO ,如果我们不希望通过编译来强制划分软件版本,即实现序列化接口的实体能够兼容先前版本,那么我们把 UserDTO 的不同修改版本的 serialVersionUID 定义为一个值,列化实体都可以相互进行串行化和反串行化。

3.1 Eslipse 中如何生成

使用Eclipse/Myeclipse IDE时,会出现左侧的黄色叹号提示,点击这个黄色叹号

3.2 IntelliJ IDEA 中如何生成

IntelliJ IDEA 默认不提供自动生成

  1. 点击 IntelliJ IDEA> Preferences...(window 中菜单名是 Setting
  2. 选择 Plugins
  3. 在搜索框查询 GenerateSerialVersion
  4. 点击搜索结果中的 No Plugins found Search in repositiories
  5. 点击搜索结果中的插件 Install
  6. 在弹出框中搜索查找 Serializable class without serialVersion ....
  7. 级别选择 warning 点击 apply
  8. 重启 IntelliJ IDEA
  9. 右键我们创建的实体对象 选择 generater->serialVersionUID 系统就会自动生成 private static final long serialVersionUID

4 问题

假设 UserDTO 这个实体类在不同地方使用,对他们设置的 serialVersionUID 进行测试

这篇关于Java 中的 serialVersionUID 是用来干什么的的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/583926

相关文章

Spring Boot循环依赖原理、解决方案与最佳实践(全解析)

《SpringBoot循环依赖原理、解决方案与最佳实践(全解析)》循环依赖指两个或多个Bean相互直接或间接引用,形成闭环依赖关系,:本文主要介绍SpringBoot循环依赖原理、解决方案与最... 目录一、循环依赖的本质与危害1.1 什么是循环依赖?1.2 核心危害二、Spring的三级缓存机制2.1 三

在Spring Boot中浅尝内存泄漏的实战记录

《在SpringBoot中浅尝内存泄漏的实战记录》本文给大家分享在SpringBoot中浅尝内存泄漏的实战记录,结合实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录使用静态集合持有对象引用,阻止GC回收关键点:可执行代码:验证:1,运行程序(启动时添加JVM参数限制堆大小):2,访问 htt

SpringBoot集成Milvus实现数据增删改查功能

《SpringBoot集成Milvus实现数据增删改查功能》milvus支持的语言比较多,支持python,Java,Go,node等开发语言,本文主要介绍如何使用Java语言,采用springboo... 目录1、Milvus基本概念2、添加maven依赖3、配置yml文件4、创建MilvusClient

浅析Java中如何优雅地处理null值

《浅析Java中如何优雅地处理null值》这篇文章主要为大家详细介绍了如何结合Lambda表达式和Optional,让Java更优雅地处理null值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录场景 1:不为 null 则执行场景 2:不为 null 则返回,为 null 则返回特定值或抛出异常场景

SpringMVC获取请求参数的方法

《SpringMVC获取请求参数的方法》:本文主要介绍SpringMVC获取请求参数的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下... 目录1、通过ServletAPI获取2、通过控制器方法的形参获取请求参数3、@RequestParam4、@

SpringBoot应用中出现的Full GC问题的场景与解决

《SpringBoot应用中出现的FullGC问题的场景与解决》这篇文章主要为大家详细介绍了SpringBoot应用中出现的FullGC问题的场景与解决方法,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录Full GC的原理与触发条件原理触发条件对Spring Boot应用的影响示例代码优化建议结论F

springboot项目中常用的工具类和api详解

《springboot项目中常用的工具类和api详解》在SpringBoot项目中,开发者通常会依赖一些工具类和API来简化开发、提高效率,以下是一些常用的工具类及其典型应用场景,涵盖Spring原生... 目录1. Spring Framework 自带工具类(1) StringUtils(2) Coll

SpringBoot条件注解核心作用与使用场景详解

《SpringBoot条件注解核心作用与使用场景详解》SpringBoot的条件注解为开发者提供了强大的动态配置能力,理解其原理和适用场景是构建灵活、可扩展应用的关键,本文将系统梳理所有常用的条件注... 目录引言一、条件注解的核心机制二、SpringBoot内置条件注解详解1、@ConditionalOn

通过Spring层面进行事务回滚的实现

《通过Spring层面进行事务回滚的实现》本文主要介绍了通过Spring层面进行事务回滚的实现,包括声明式事务和编程式事务,具有一定的参考价值,感兴趣的可以了解一下... 目录声明式事务回滚:1. 基础注解配置2. 指定回滚异常类型3. ​不回滚特殊场景编程式事务回滚:1. ​使用 TransactionT

Spring LDAP目录服务的使用示例

《SpringLDAP目录服务的使用示例》本文主要介绍了SpringLDAP目录服务的使用示例... 目录引言一、Spring LDAP基础二、LdapTemplate详解三、LDAP对象映射四、基本LDAP操作4.1 查询操作4.2 添加操作4.3 修改操作4.4 删除操作五、认证与授权六、高级特性与最佳