2012-04-30 9 views
5

私はSun認定Javaのプログラマーのための模擬試験から取られている次のコードがあります。テストは、この行の結果をお願い致しますJavaの静的スコープ

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

これは、スタティック初期化ブロックです。それはローカル変数の値を変更しているので、このコンテキストではそれほど重要ではありません。

+2

@anonymous、すなわち静的メンバフィールドはxと呼ばれていない、私はそれを得る感謝。スコープの後に変数が存在しないため、スコープがあります。 – czchlong

5

int x = 5;が実行されますが、ここでxはローカル変数であり、static int xのメンバーではありません。

0

Xの値は5に設定されているが、唯一の静的ブロックのコンテキスト内

static 
     { 
      int x = 5; 
     } 

static int x,y;に宣言された変数xがクラスレベルの範囲を有し、コードそれ参照の残りに影響されますそれ。

1

静的ブロックなので、定義する変数は{}の範囲を超えます。それは方法

1

と同じように、SENSE -in働くことがxと呼ばれるローカル変数の値を変更しますが、それだけで0