5

Sun CertifiedJavaProgrammerの模擬試験から取得した次のコードがあります。

public class Static
{ 
      static 
      { 
            int x = 5; 
      }

      static int x,y; 
      public static void main(String args[]) 
      { 
            x--; myMethod(); 
            System.out.println(x + y + ++x); 
      }

      public static void myMethod() 
      { 
             y = x++ + ++x; 
      }
}

テストでは、次の行の結果を尋ねられます。

System.out.println(x + y + ++x);

答えは3ですが、なぜ3なのか完全にはわかりません。完全に無視すれば、その答えにたどり着くことができます。

      static 
      { 
            int x = 5; 
      }

私の質問は、上記のコードスニペットの意味は何ですか?変数「x」の値を変更しないのはなぜですか?

4

5 に答える 5

6

それは静的初期化ブロックです。しかし、それはローカル変数の値を変更しているため、このコンテキストでは実際には問題になりません。

于 2012-04-30T17:05:57.353 に答える
5

int x = 5;実行されますが、これはメンバーxではなくローカル変数です。static int x

于 2012-04-30T17:06:26.840 に答える
1

これは静的ブロックであるため、そこで定義する変数は{および の範囲を超えることはできません}。その意味では、メソッドと同じように機能します

于 2012-04-30T17:06:56.110 に答える
1

と呼ばれるローカル変数の値を変更しますがx、静的メンバーフィールドは変更しませんx。つまり、0 です。

于 2012-04-30T17:06:57.243 に答える
0

x の値は 5 に設定されていますが、静的ブロックのコンテキスト内のみです。

static 
      { 
            int x = 5; 
      }

で宣言された変数 xstatic int x,y;はクラス レベルのスコープを持ち、それを参照する残りのコードの影響を受けます。

于 2012-04-30T17:06:48.833 に答える