栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

为什么一般我们的实体类,要实现Serializable 接口

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么一般我们的实体类,要实现Serializable 接口

目录
  • 1 前提
  • 2 Serializable接口起什么作用呢?
  • 3 序列化版本号有什么用呢?
  • 4 java语言中是采用什么机制来区分类的?
  • 5 这种自动生成序列化版本号有什么缺陷?
  • 6 结论
  • 7 怎样使某个属性不序列化

1 前提

参与序列化和反序列化的对象,必须实现 Serializable 接口。

3、注意:通过源代码发现,Serializable接口只是一个 标志接口:

public interface Serializable {
}

这个接口当中什么代码都没有。

2 Serializable接口起什么作用呢?
  • 起到 标识 的作用,标志的作用,java虚拟机看到这个类实现了这个接口,可能会对这个类进行特殊待遇。
  • Serializable这个标志接口是给java虚拟机参考的,java虚拟机看到这个接口之后,会为该类自动生成一个序列化版本号。
3 序列化版本号有什么用呢?

区分两个类是否相同。

4 java语言中是采用什么机制来区分类的?
第一:首先通过 类名 进行比对,如果类名不一样,
肯定不是同一个类。

第二:如果类名一样,再怎么进行类的区别?
靠 序列化版本号 进行区分。

eg.
小明编写了一个类:com.baidu.java.bean.Student implements Serializable
小红编写了一个类:com.baidu.java.bean.Student implements Serializable
不同的人编写了同一个类,但“这两个类确实不是同一个类”。这个时候序列化版本就起上作用了。
对于java虚拟机来说,java虚拟机是可以区分开这两个类的,因为这两个类都实现了Serializable接口,都有默认的序列化版本号,他们的序列化版本号不一样。所以区分开了。(这是自动生成序列化版本号的好处)

5 这种自动生成序列化版本号有什么缺陷?
Java虚拟机看到Serializable接口之后,
会自动生成一个序列化版本号。

这种自动生成的序列化版本号缺点是:
一旦代码确定之后,不能进行后续的修改,因为只要修改
,必然会重新编译,此时会生成全新的序列化版本号,
这个时候java虚拟机会认为这是一个全新的类。
(这样就不好了!)
6 结论

凡是一个类实现了Serializable接口,建议给该类提供一个固定不变的序列化版本号。
这样,以后这个类即使代码修改了,但是版本号不变,java虚拟机会认为是同一个类。

7 怎样使某个属性不序列化

使用 transient 关键字

transient关键字表示游离的,不参与序列化。

public user implements Serializable{
    private int no;
    private transient String name; // name不参与序列化操作!
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/976195.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号