我在Class中使用了一个静态变量,并且希望该变量的值在jvm重新启动后保持不变。 想法是存储此值。 有人可以帮我吗?
答案 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会清除所有内容。因此您无法从静态变量获取值。如果使用数据库,则只有获得值才不会失败。