3

、、という名前Tester_1の3つのクラスがあるとします。それらは次のように定義されます:Tester_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());
}
}

3つのクラスをすべてコンパイルした後、次の順序で実行します。

java Tester_1

java Tester_3

しかし、私はこの出力を取得します:

最初の実行からtrue 、2番目の実行からfalse。何故ですか ?Tester_1がブール値を値に設定すると、 Tester_3を実行したときにtrueデフォルトが表示されるのはなぜfalseですか?

4

5 に答える 5

7

staticJava仮想マシン(JVM)レベルでのみ有効です。

呼び出すたびjava xxxに、前の呼び出しと何も共有しない新しいJVMを作成します=>すべての静的変数は再びデフォルト値を取得します。

于 2013-01-07T12:54:08.250 に答える
1

静的変数はJVM内で静的に値を保持しますが、JVM間では保持されないためです。JVMプロセスが終了すると、メモリ内の変数値が破棄されます。2番目のJVMが開始されると、すべてが再初期化されます。

実行間で値を保持する必要がある場合は、それらをどこかに(たとえば、ファイルシステムやデータベースに)永続化する必要があります。

于 2013-01-07T12:54:42.150 に答える
0

2つの異なるプロセスを実行しているという理由だけで。2つの異なるメインがあることを意味します。つまり、2つの異なる実行パスがあります。

各プロセスは新しいJVMを作成するため、1番目で有効な静的変数は2番目のJVMでは機能しません。

于 2013-01-07T12:55:35.557 に答える
0

2つの別々の実行->異なる結果。

JVMは、実行のたびに以前のデータを消去するため、より興味深いものになります。

于 2013-01-07T12:56:35.143 に答える
0

java Tester_1

これはプログラムの最初の実行です。(つまり、プロセス)

java Tester_3

これはプログラムの2回目の実行です。(別のプロセス)

static値はプロセス内で持続します。プロセス間ではありません。

于 2013-01-07T12:58:22.067 に答える