当我设置boolean:true时,为什么我会得到默认的false?

时间:2013-01-07 12:51:55

标签: java static

让我们有三个名为Tester_1Tester_2Tester_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

5 个答案:

答案 0 :(得分:7)

static仅在Java虚拟机(JVM)级别有效。

每次拨打java xxx时,您都会创建一个新的JVM,该JVM与之前的呼叫不共享任何内容=>所有静态变量都会再次获得默认值。

答案 1 :(得分:1)

因为静态变量在JVM中静态保存它们的值,但不是跨JVM保持的。一旦JVM进程退出,它的内存中的变量值就会被破坏。当第二个JVM启动时,所有内容都会重新初始化。

如果需要在运行期间保留值,则必须将它们保存在某处(例如,文件系统或数据库)。

答案 2 :(得分:0)

只是因为你正在运行两个不同的过程。意味着您有两个不同的主电源,这意味着它将有两个不同的执行路径。

每个进程都会创建新的JVM,以便在1st中有效的静态变量在第二个JVM中不起作用。

答案 3 :(得分:0)

两次单独的执行 - >不同的结果。

JVM使其更有趣,因为它会删除每次执行的先前数据。

答案 4 :(得分:0)

java Tester_1

这是第一轮计划。 (即一个过程)

java Tester_3

这是第二轮计划。 (另一个过程)

static值在流程中持续存在。不是跨过程。