Самый простой вариант, который приходит мне в голову, это использовать singleton вместо статических полей.Одноэлементный объект может быть сериализован и десериализован, и вы можете управлять его временем жизни, сохраняя при этом «глобальное состояние», которое дают вам статические поля (при этом глобальное состояние - это плохо, но это другая тема)
В противном случае - статическое состояние сохраняется в течение всего времени жизни загрузчика классов (что обычно означает время жизни JVM).Поэтому, если вы хотите сохранить состояние, имеет смысл сделать это при завершении работы и восстановить его при загрузке класса.
Runtime.addShutdownHook(..)
для выполнения сериализации при завершении работы - используйте
static {..}
блок для загрузки при следующем открытии
Формат сериализации может быть любым.JSON, BSON, Java-сериализация (с использованием ObjectOutputStream
)
Но это необычно и в большинстве случаев неправильно.Поэтому убедитесь, что это то, что вы хотите.Если вы просто хотите, чтобы состояние сохранялось на протяжении всего жизненного цикла приложения, ничего не делайте.А если вы хотите сохранить что-то дольше, выберите опцию singleton или рассмотрите возможность использования небольшой базы данных, а не статических полей.