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

相关文章

SpringBoot集成图片验证码框架easy-captcha的详细过程

《SpringBoot集成图片验证码框架easy-captcha的详细过程》本文介绍了如何将Easy-Captcha框架集成到SpringBoot项目中,实现图片验证码功能,Easy-Captcha是... 目录SpringBoot集成图片验证码框架easy-captcha一、引言二、依赖三、代码1. Ea

Springboot控制反转与Bean对象的方法

《Springboot控制反转与Bean对象的方法》文章介绍了SpringBoot中的控制反转(IoC)概念,描述了IoC容器如何管理Bean的生命周期和依赖关系,它详细讲解了Bean的注册过程,包括... 目录1 控制反转1.1 什么是控制反转1.2 SpringBoot中的控制反转2 Ioc容器对Bea

Spring Cloud Hystrix原理与注意事项小结

《SpringCloudHystrix原理与注意事项小结》本文介绍了Hystrix的基本概念、工作原理以及其在实际开发中的应用方式,通过对Hystrix的深入学习,开发者可以在分布式系统中实现精细... 目录一、Spring Cloud Hystrix概述和设计目标(一)Spring Cloud Hystr

Spring Boot整合消息队列RabbitMQ的实现示例

《SpringBoot整合消息队列RabbitMQ的实现示例》本文主要介绍了SpringBoot整合消息队列RabbitMQ的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目录RabbitMQ 简介与安装1. RabbitMQ 简介2. RabbitMQ 安装Spring

springMVC返回Http响应的实现

《springMVC返回Http响应的实现》本文主要介绍了在SpringBoot中使用@Controller、@ResponseBody和@RestController注解进行HTTP响应返回的方法,... 目录一、返回页面二、@Controller和@ResponseBody与RestController

JAVA集成本地部署的DeepSeek的图文教程

《JAVA集成本地部署的DeepSeek的图文教程》本文主要介绍了JAVA集成本地部署的DeepSeek的图文教程,包含配置环境变量及下载DeepSeek-R1模型并启动,具有一定的参考价值,感兴趣的... 目录一、下载部署DeepSeek1.下载ollama2.下载DeepSeek-R1模型并启动 二、J

springboot rocketmq配置生产者和消息者的步骤

《springbootrocketmq配置生产者和消息者的步骤》本文介绍了如何在SpringBoot中集成RocketMQ,包括添加依赖、配置application.yml、创建生产者和消费者,并展... 目录1. 添加依赖2. 配置application.yml3. 创建生产者4. 创建消费者5. 使用在

Spring Retry 实现乐观锁重试实践记录

《SpringRetry实现乐观锁重试实践记录》本文介绍了在秒杀商品SKU表中使用乐观锁和MybatisPlus配置乐观锁的方法,并分析了测试环境和生产环境的隔离级别对乐观锁的影响,通过简单验证,... 目录一、场景分析 二、简单验证 2.1、可重复读 2.2、读已提交 三、最佳实践 3.1、配置重试模板

Spring中@Lazy注解的使用技巧与实例解析

《Spring中@Lazy注解的使用技巧与实例解析》@Lazy注解在Spring框架中用于延迟Bean的初始化,优化应用启动性能,它不仅适用于@Bean和@Component,还可以用于注入点,通过将... 目录一、@Lazy注解的作用(一)延迟Bean的初始化(二)与@Autowired结合使用二、实例解

SpringBoot使用Jasypt对YML文件配置内容加密的方法(数据库密码加密)

《SpringBoot使用Jasypt对YML文件配置内容加密的方法(数据库密码加密)》本文介绍了如何在SpringBoot项目中使用Jasypt对application.yml文件中的敏感信息(如数... 目录SpringBoot使用Jasypt对YML文件配置内容进行加密(例:数据库密码加密)前言一、J