疑问

刚刚学习Java的时候,我们学习三层架构,三层架构中的一层就是持久化层,持久化层里面有实体类(Entity)、DAO接口、DAO接口实现类等概念。有关三层架构的理解,请参考:http://www.moonlightgate.com/archives/58
在我们建实体类的时候,往往都要实现Serializable接口,这是为什么呢?

回顾

在学习Java基础的时候,你是肯定接触过Serializable接口的。
一般都是在学习输入、输出流的时候,估计那个时候你也没太搞明白为什么要实现Serializable接口。

解释

Serializable直译过来就是“序列化”。估计听到这个解释就更懵!
经过研究,我将对象需要实现Serializable接口的原因总结如下:
A. Java对象跳出JVM就需要Serializable序列化。
所有在Java中创建的对象都是运行在JVM(Java虚拟机)中的,如果这个对象或者说这个对象的数据要跳出JVM,需要保存到数据库或者文件中的时候,这个对象就需要Serializable序列化。
B. Serializable序列化是JVM内环境和JVM外环境的翻译机。
在JVM内部,对象是以只有JVM能看懂的class文件形式存在的,而class文件在JVM外部是无法被解读的。比如我们随便用记事本打开一个class文件,看到的会是类似下面的这种乱码:
file
Serializable序列化的意思就是将对象以二进制的形式翻译一下,然后保存到JVM外部,因为二进制是计算机都能理解的语言。

总结

总结下,如果一个对象要跳出JVM保存,就需要进行Serializable序列化。
实体类作为和数据库打交道的对象,自然是需要将数据保存到JVM外的数据库上的,所以实体类实现Serializable接口就可以理解了。
但实际上,实体类实现Serializable接口是个约定俗成的事情,即使不继承,也不会影响实体类的运行,因为实体类和数据库打交道最终是通过拼接而成的SQL语句,而非直接将数据序列化传输给数据库。

One comment on “实体类为什么要实现Serializable接口?

发表评论

邮箱地址不会被公开。 必填项已用*标注