Если вы хотите, чтобы переменная, значение которой может измениться во время выполнения кода, была восстановлена до того состояния, которое было при остановке JVM, при следующем запуске JVM вам потребуется persist значение для внешнего носителя.Обычно это делается путем сохранения значения в файле или базе данных и извлечения его при следующем запуске программы.Ключевой вопрос при решении этой проблемы - как представить значение вне исполняемой программы.Для простых типов, таких как числа и строки, это не большая проблема.Для значений, которые являются объектами нетривиальных классов, проблема становится более интересной.Это известно как объектная сериализация .
С оговоркой о том, что существует много разных способов сохранения данных , вот минимальный пример использования Java Serialization , чтобы сделать точку более конкретной.
class MyClassData implements Serializable {
private String myString = "A string";
private int myNumber = 5;
// To make the point that the state of the object stored in the
// variable can change at run-time.
public void changeThings( String myString, int myNumber) {
this.myString = myString;
this.myNumber = myNumber;
}
}
public class MyClass {
private static MyClassData data = restore();
// Call before exiting the program
private static void store() {
try( ObjectOutputStream out =
new ObjectOutputStream(new FileOutputStream("data.dat"))) {
out.writeObject(data);
}
catch( IOException e ) {
// Deal with this
}
}
private static MyClassData restore() {
try( ObjectInputStream in =
new ObjectInputStream(new FileInputStream("data.dat"))) {
return (MyClassData) in.readObject();
}
catch( IOException | ClassNotFoundException e ) {
return new MyClassData();
}
}
}