我在一个类中使用了一个静态变量,我希望这个变量的值在重新启动 jvm 后保持不变。这个想法是存储这个值。有人能帮我吗 ?
1148 次
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 回答