如果我有一个我存储在会话中的类的实例,我需要使它可序列化。这个类有一个静态变量,它会在存储的每个实例中被序列化吗?
静态变量是对包含后台大量数据的缓存的引用。所有这些数据都会被序列化吗?如果是这样,似乎最好使此变量成为瞬态,并在每次恢复实例时重新获取缓存实例。也许不会在课堂上存储缓存实例。
当一个类从序列化状态恢复时,构造函数是否会执行?如果没有,我可以使用任何其他方法来重新设置瞬态变量吗?
答案 0 :(得分:11)
这个类有一个静态变量,会 这在每个实例中都是序列化的 存储
没有。根据{{3}}:“类的默认可序列化字段被定义为非瞬态和非静态字段。”
当一个类从序列化状态恢复时,构造函数是否会执行?
没有。反序列化绕过构造函数(除非你有一个不可序列化的超类)。
如果没有,我可以使用其他方法来重新设置瞬态变量吗?
您可以使用readObject()
方法,如Java Object Serialization Specificaiton API文档中所述。
答案 1 :(得分:3)
静态和瞬态字段未序列化。不,没有调用构造函数。有关详情,请查看:http://java.sun.com/developer/technicalArticles/ALT/serialization/