0

我在一个类中使用了一个静态变量,我希望这个变量的值在重新启动 jvm 后保持不变。这个想法是存储这个值。有人能帮我吗 ?

4

2 回答 2

1

如果您希望在代码执行期间其值可以更改的变量恢复到您停止 JVM 时的状态,下次启动 JVM 时,您需要将该值保存到外部介质中。这通常通过将值存储在文件或数据库中来完成,并在程序下次启动时检索它。解决这个问题的一个关键问题是如何在执行程序之外表示值。对于像数字和字符串这样的简单类型,这不是什么大问题。对于作为非平凡类对象的值,问题变得更加有趣。这称为对象序列化

由于免责声明有许多不同的方式来持久化数据,这里是一个使用Java 序列化的最小示例,以使这一点更加具体。

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();
        }
    }
}
于 2019-06-28T12:53:01.537 回答
0

您重新启动 jvm 一切都会清楚。因此您无法从静态变量中获取值。如果您使用数据库,那么只有您获得值而不会失败。

于 2019-06-28T11:21:07.993 回答