我在学校学习了如何实现Serializable,但从未提及过什么,如果有的话,对象已经在Java中实现了这一点。所以我的问题在于标题"是否有一些由Java自动序列化的对象或数据类型(无需实现Serializable)?"如果是这样,它们背后的原因是什么呢?
答案 0 :(得分:0)
Javadoc很清楚(重点是我的):
类的可序列化由实现该类的类启用 java.io.Serializable接口。 不实现此功能的类 interface不会将其任何状态序列化或反序列化。
但回答:
"是否有一些自动的对象或数据类型 由Java序列化(无需实现Serializable)?"
答案是肯定的,因为Javadoc补充说:
可序列化类的所有子类型本身都是可序列化的。
这是一个更详细的答案:
1)原语事实上是可序列化的。
2)非常重要的JDK类实现Serializable
。这是有道理的,因为这些不能被客户修改,因此不能被序列化。
Here是接口java.io.Serializable"的使用。在javadoc中生成。名单很大。
3)每个数组类型实现接口Cloneable和 java.io.Serializable ,其原因与其他JDK类完全相同。(JLS 10.1 Array Types)。
4)可序列化类的所有子类型本身都是可序列化的。
例如javax.swing.JComponent
,它是所有Swing组件的基类,除了顶级容器实现Serializable
:
public abstract class JComponent extends Container implements Serializable,...{...}
因此,其子课程不需要直接实施Serializable
,实际上他们中的大部分都不会这样做。
例如:
public abstract class AbstractButton extends JComponent implements ItemSelectable, SwingConstants {...}
public class JButton extends AbstractButton implements Accessible {...}
public class JComboBox<E> extends JComponent{...}
我们可以看到Number
的类似事物是数值的基类
Number
实施Serializable
:
public abstract class Number implements java.io.Serializable {...}
许多子类通过及物性来实现Serializable
:
public final class Integer extends Number implements Comparable<Integer> {...}
public final class Float extends Number implements Comparable<Float> {...}
但请注意,实现Serializable
的类的子类也可以显式实现java.io.Serializable
,例如:
public class AtomicInteger extends Number implements java.io.Serializable {...}
可能是为了使信息在源代码中更加明确
但是,如果代码不稳定且层次结构可能发生变化,它也会有所帮助。
无论发生什么变化,这个类都可以序列化。
答案 1 :(得分:-1)
是。所有数组类型都可自动序列化。 JLS #10.1