假设有三个类,名为Tester_1、Tester_2、Tester_3。它们的定义是:
Tester_1:
class Tester_1 {
public static void main(String args[]) {
Tester_2.setBoolean(true);
System.out.println(Tester_2.getBoolean());
}
}Tester_2:
class Tester_2 {
public static boolean var = false; // Static var
public static void setBoolean(boolean value) {
var = value;
}
public static boolean getBoolean() {
return var;
}
}Tester_3:
class Tester_3 {
public static void main(String args[]) {
System.out.println(Tester_2.getBoolean());
}
}在编译完这三个类之后,我按照以下顺序运行它们:
java Tester_1
java Tester_3但是我得到了这个输出:
在第一次运行时为true,从第二次运行时为false。那是为什么?当Tester_1将布尔值设置为true值时,为什么在运行Tester_3时获得默认的false?
发布于 2013-01-07 12:54:08
static仅在Java (JVM)级别上有效。
每次调用java xxx时,都会创建一个新的JVM,它不会与上一次调用=>共享任何内容,所有静态变量都会再次获得它们的默认值。
发布于 2013-01-07 12:54:42
因为静态变量在JVM中静态地保存它们的值,但是在JVM中不被保存。一旦JVM进程退出,它在内存中的变量值就会被销毁。当第二个JVM启动时,一切都会被重新初始化。
如果需要跨运行保存值,则必须将其保存在某个地方(例如文件系统或数据库)。
发布于 2013-01-07 12:56:35
两次单独的处决
JVM使它变得更有趣,因为它为每次执行删除了以前的数据。
https://stackoverflow.com/questions/14196347
复制相似问题