首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >为什么一般我们的实体类,要实现Serializable 接口

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

作者头像
一写代码就开心
发布2022-06-14 12:49:17
发布2022-06-14 12:49:17
1.1K0
举报
文章被收录于专栏:java和pythonjava和python

目录

1 前提

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

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

代码语言:javascript
复制
public interface Serializable {
}

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

2 Serializable接口起什么作用呢?

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

3 序列化版本号有什么用呢?

区分两个类是否相同。

4 java语言中是采用什么机制来区分类的?

代码语言:javascript
复制
第一:首先通过 类名 进行比对,如果类名不一样,
肯定不是同一个类。

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

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

5 这种自动生成序列化版本号有什么缺陷?

代码语言:javascript
复制
Java虚拟机看到Serializable接口之后,
会自动生成一个序列化版本号。

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

6 结论

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

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

使用 transient 关键字

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

代码语言:javascript
复制
public user implements Serializable{
    private int no;
    private transient String name; // name不参与序列化操作!
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-06-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目录
  • 1 前提
  • 2 Serializable接口起什么作用呢?
  • 3 序列化版本号有什么用呢?
  • 4 java语言中是采用什么机制来区分类的?
  • 5 这种自动生成序列化版本号有什么缺陷?
  • 6 结论
  • 7 怎样使某个属性不序列化
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档