如果没有显式声明, 系统会自动生成.实现Serializable的第二个代价是, 它增加了出现Bug和安全漏洞的可能性. -> 反序列化是一个隐藏的构造器.实现Serializable的第三个代价是,...反序列化时这些域将被初始化为默认值.当你决定把一个字段标记为非transient之前, 首先需要说服自己, 这个字段是这个对象逻辑状态的一部分.无论你是否使用默认的序列化形式, 如果在读取整个对象状态的任何其他方法上强制任何同步..., 则也必须在对象序列化上强制这种同步.不论你选择了哪种序列化形式, 都要为自己编写的每个可序列化的类声明一个显式的序列版本UID(serial version UID).除非你要破坏和所有已经存在的实例的兼容性...自从Java1.5以来, 它就不再是在可序列化的类中维持实例控制的最佳方法了.应该尽可能地使用枚举类型来实施实例控制的约束条件.但是如果这不可能做到, 或者你需要一个实现了序列化的实例受控的类, 那么你就必须提供一个...): 为可序列化的类设计一个私有的静态嵌套类(序列化代理), 它应该有一个单独的构造器, 其参数类型就是那个外围类.