在Java中存储静态变量的值

时间:2019-06-28 10:54:23

标签: java variables static

我在Class中使用了一个静态变量,并且希望该变量的值在jvm重新启动后保持不变。 想法是存储此值。 有人可以帮我吗?

2 个答案:

答案 0 :(得分:1)

如果您希望变量的值在代码执行过程中可以更改,可以将其还原为停止JVM时的值,下次启动JVM时,需要persist对外部媒介的价值。通常通过将值存储在文件或数据库中,并在下次程序启动时检索它来完成此操作。解决此问题时的关键问题是如何在执行程序之外表示值。对于数字和字符串之类的简单类型,这不是什么大问题。对于作为非平凡类的对象的值,此问题变得更加有趣。这就是所谓的object serialization

免责声明存在多种持久数据的方式,这是一个使用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();
        }
    }
}

答案 1 :(得分:0)

重新启动jvm会清除所有内容。因此您无法从静态变量获取值。如果使用数据库,则只有获得值才不会失败。