,发生一些情况导致反序列化对象无法获取数据eg:类的某些实例域默认值违反了约束条件时使用
一些专门为了继承的类不是可序列化的,就不可能编写出可序列化的子类,如果超类没有提供可访问的无参构造器,子类也不可能被序列化...,当defaultWriteObject被调用时,每个非transient都会被序列化,决定非transient时确保是逻辑状态的一部分.
transient反序列化时初始化为默认值,否则提供readObject...将实例受控的类编写成枚举,JVM对此提供了保障.用readResolve进行实例控制并不过时
考虑使用序列化代理代替序列化实例
序列化代理,一个私有的静态嵌套类精确地表示外围类的实例的逻辑状态,它应该有个单独的构造器...,并以外围实例为参数并从中复制数据.然后用writeReplace方法在序列化之前将外围类的实例变成了序列化代理,并在外围类的ReadObject方法中抛出异常,防止伪造.最后在ReadResolve方法中构造外围类的实例...,最好在传递给底层参数之前检查,避免在底层抛出异常
如果无法避免那么在高层绕开,从而将问题隔离
每个方法抛出的异常都要有文档
@throws
不要为未受检的异常提供 throws子句,在文档中记录非受检的异常是满足前提条件的最佳做法