`

<转>Java中serialVersionUID的解释

阅读更多
原文地址:http://www.blogjava.net/invisibletank/archive/2007/11/15/160684.html

serialVersionUID作用:
       序列化时为了保持版本的兼容性,即在版本升级时反序列化仍保持对象的唯一性。
有两种生成方式:
       一个是默认的1L,比如:private static final long serialVersionUID = 1L;
       一个是根据类名、接口名、成员方法及属性等来生成一个64位的哈希字段,比如:
       private static final   long     serialVersionUID = xxxxL;

当你一个类实现了Serializable接口,如果没有定义serialVersionUID,Eclipse会提供这个
     提示功能告诉你去定义 。在Eclipse中点击类中warning的图标一下,Eclipse就会
     自动给定两种生成的方式。如果不想定义它,在Eclipse的设置中也
      可以把它关掉的,设置如下:
        Window ==> Preferences ==> Java ==> Compiler ==> Error/Warnings ==>
        Potential programming problems
        将Serializable class without serialVersionUID的warning改成ignore即可。

如果你没有考虑到兼容性问题时,就把它关掉,不过有这个功能是好的,只要任何类别实现了Serializable这个接口的话,如果没有加入serialVersionUID,Eclipse都会给你warning提示,这个serialVersionUID为了让该类别Serializable向后兼容。

如果你的类Serialized存到硬盘上面后,可是后来你却更改了类别的field(增加或减少或改名),当你Deserialize时,就会出现Exception的,这样就会造成不兼容性的问题。

但当serialVersionUID相同时,它就会将不一样的field以type的预设值Deserialize,可避开不兼容性问题。
分享到:
评论

相关推荐

    Java中serialVersionUID的解释

    在 Eclipse 的设置中也可以把它关掉的,设置如下:Window ==&gt; Preferences ==&gt; Java ==&gt; Compiler ==&gt; Error/Warnings ==&gt; Potential programming problems,将 Serializable class without serialVersionUID 的 ...

    Java序列化与反序列化<转>

    Java序列化与反序列化是Java编程中一个重要的概念,它允许我们将对象的状态转换为字节流,以便存储或在网络中传输。这个过程被称为序列化,而将字节流恢复为对象的过程则称为反序列化。Java提供了一个内置的机制来...

    25个经典Spark算子的JAVA实现

    List&lt;Integer&gt; result = new ArrayList&lt;&gt;(); for (Integer number : iterable) { result.add(number * number); // 平方操作 } return result.iterator(); } }); ``` #### 5. Distinct Operator Distinct...

    xml解析器,返回XmlNode结构,便于循环处理

    * &lt;p&gt;Title: Xml树&lt;/p&gt; * * &lt;p&gt;Description: &lt;/p&gt; * * &lt;p&gt;Copyright: Copyright (c) 2004&lt;/p&gt; * * &lt;p&gt;Company: &lt;/p&gt; * * @author xulinjian * @version 2.0 */ public class XmlNode implements ...

    从零搭建Spring Boot脚手架整合 Mybatis Plus.docx

    &lt;artifactId&gt;mybatis-plus-boot-starter&lt;/artifactId&gt; &lt;version&gt;3.3.2&lt;/version&gt; &lt;/dependency&gt; &lt;!-- 如果需要使用代码生成器功能,则还需引入以下依赖 --&gt; &lt;dependency&gt; &lt;groupId&gt;com.baomidou&lt;/groupId&gt; ...

    springboot整合cxf发布webservice以及调用的方法

    &lt;artifactId&gt;cxf-spring-boot-starter-jaxws&lt;/artifactId&gt; &lt;version&gt;3.1.11&lt;/version&gt; &lt;/dependency&gt; ``` 接下来,我们需要定义一个公共的返回实体类`BaseResult`: ```java public class BaseResult { private...

    从零搭建Spring Boot脚手架,增加通用的功能.docx

    Rest&lt;T&gt; restBody = new RestBody&lt;&gt;(); restBody.setMsg(msg); return restBody; } public static &lt;T&gt; Rest&lt;T&gt; okData(T data) { Rest&lt;T&gt; restBody = new RestBody&lt;&gt;(); restBody.setData(data); return ...

    struts2实现文件上传(单个+多个文件上传

    // 与JSP页面的&lt;s:file/&gt;标签中的name属性对应 private File myFile; private String myFileContentType; private String myFileFileName; // get和set方法 public File getMyFile() { return myFile; } ...

    简单的servlet增,删,改,查

    &lt;td&gt;&lt;a href='addUser.jsp'&gt;添加&lt;/a&gt;&nbsp; &lt;a href='&lt;%=basePath%&gt;DelUserServlet?id=&lt;%=users.getId()%&gt;'&gt;删除&lt;/a&gt;&nbsp; &lt;a href='updateUser.jsp'&gt;更新&lt;/a&gt;&nbsp; &lt;a href="login.jsp"&gt;登陆&lt;/...

    struts2用户登录

    &lt;li&gt;&lt;a href="&lt;s:url action="Register" /&gt;"&gt;Register&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="&lt;s:url action="Logon!input" /&gt;"&gt;SignOn&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; &lt;/body&gt; &lt;/html&gt; ``` 这里 `&lt;s:url action="Logon!input" /&gt;` 表示调用名...

    springboot+mybatisplus自动建表案例

    &lt;artifactId&gt;mysql-connector-java&lt;/artifactId&gt; &lt;/dependency&gt; &lt;/dependencies&gt; ``` 接下来,配置数据库连接。在Spring Boot的`application.properties`文件中,我们需要设置数据源的相关属性,如数据库URL、...

    java代码块测试

    在Java编程语言中,代码块是执行特定任务的语句集合,它们可以是局部的、实例的、静态的,或者用于异常处理。本主题将深入探讨Java中的代码块及其在Struts2框架中的应用。 首先,让我们理解Java的四种主要代码块: ...

    基于javaweb上机报告.doc

    cart = new HashMap&lt;&gt;(); session.setAttribute("cart", cart); } if (cart.containsKey(bookId)) { cart.put(bookId, cart.get(bookId) + 1); } else { cart.put(bookId, 1); } response.getWriter()....

    coreJava: serialVersionUID

    在Java编程中,`serialVersionUID` 是一个非常重要的概念,特别是在序列化和反序列化过程中。这个特殊标识符主要用于版本控制,确保不同版本的类在序列化和反序列化时能够正确匹配。当我们讨论`serialVersionUID`时...

    java类中serialVersionUID详解.pdf

    ### Java 类中 `serialVersionUID` 详解 #### 一、`serialVersionUID` 概述 在 Java 中,`serialVersionUID` 是一个与类关联的长整型常量,用于支持序列化机制。当一个对象被序列化时,该对象所属类的 `...

    oscache-2.4.1-full.rar

    &lt;br/&gt; }&lt;br/&gt;&lt;br/&gt; }&lt;br/&gt; &lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;&lt;br/&gt; 通过CacheManager类来看怎样缓存对象的,这个类中所用的News只是具体功能的类,我就不贴出来了,你可以自己写一个! view plaincopy to clipboardprint?package...

    AndroidHttps服务器端和客户端简单实例.pdf

    &lt;%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%&gt; &lt;% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request....

    用maven创建基于wink的rest服务(三)-携带纯文本文件的post请求

    &gt;&gt; resources = new HashSet&lt;&gt;(); resources.add(TextFileResource.class); appConfig.setRootResourceClasses(resources); DeploymentConfiguration configuration = new DeploymentConfiguration(); ...

    名企java笔试编程题(最经典、最全面的java面试时的编程题)

    在Java集合框架中,如果要实现元素的比较,通常需要实现`Comparable&lt;T&gt;`接口或者自定义`Comparator&lt;T&gt;`。`Comparable&lt;T&gt;`接口适用于类的实例之间进行自然排序,而`Comparator&lt;T&gt;`接口则用于定制排序规则。例如,在...

    struts2.3.8配置教程

    &lt;%@ page language="java" import="java.util.*" pageEncoding="utf-8"%&gt; &lt;%@ taglib prefix="s" uri="/struts-tags" %&gt; &lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&gt; &lt;html&gt; &lt;head&gt; &lt;title...

Global site tag (gtag.js) - Google Analytics