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

Bhu*_*han 9 java serialization static static-members

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

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

Boz*_*zho 12

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

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

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

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

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

  • 可靠的信息使用/依赖:) +1 (3认同)