有什么办法可以保存“静态成员”的状态吗?

时间:2011-07-10 21:53:53

标签: java serialization static static-members

就像我们使用序列化保存instance variables的方式一样,有什么方法可以保存static成员的状态?

如果出现这种情况,恢复静态成员的状态对于恢复某些内容是必要的,那么如何做到呢?

1 个答案:

答案 0 :(得分:12)

我想到的最简单的选择是使用singleton而不是静态字段。单例对象可以被序列化和反序列化,你可以管理它的生命周期,同时保留静态字段给你的“全局状态”(也就是说,全局状态是一件坏事,但这是一个不同的主题)

否则 - 在类加载器的整个生命周期中保留静态(通常表示JVM的生命周期)。因此,如果您想要保持状态,那么在关闭时执行它是有意义的,并在类加载时恢复它。

  • Runtime.addShutdownHook(..)在关机时执行序列化
  • 使用static {..}块在下次打开时加载

序列化格式可以是任何东西。 JSON,BSON,java序列化(使用ObjectOutputStream

但这是不寻常的,在大多数情况下是错误的。所以要确保这是你想要的。如果您只是希望状态在应用程序的生命周期中存在,请不要执行任何操作。如果你想坚持更长时间,可以选择单例选项或考虑使用小型数据库而不是静态字段。