хранение значения статических переменных в Java - PullRequest
0 голосов
/ 28 июня 2019

Я использовал статическую переменную в классе, и я хочу, чтобы значение этой переменной оставалось неизменным после перезапуска jvm. Идея состоит в том, чтобы сохранить это значение. Кто-нибудь может мне помочь?

Ответы [ 2 ]

1 голос
/ 28 июня 2019

Если вы хотите, чтобы переменная, значение которой может измениться во время выполнения кода, была восстановлена ​​до того состояния, которое было при остановке 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();
        }
    }
}
0 голосов
/ 28 июня 2019

Вы перезапускаете jvm, все будет ясно. Так что вы не можете получить значения из статических переменных.Если вы используете базу данных, то только значения вы получите без сбоев.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...