2012-04-30 39 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,謝謝,我得到它。它是有作用域的,所以變量在範圍之後不存在。 – czchlong

5

int x = 5;確實得到執行,但是x這裏是一個局部變量,而不是static int x成員。

0

X的值被設置爲5,但只有靜塊的在static int x,y;聲明的上下文

static 
     { 
      int x = 5; 
     } 

變量x內已類級範圍,並通過代碼的引用的其餘部分的影響它。

1

它是一個靜態塊,因此您定義的變量不能超出{}的範圍。工作-in是在情理之中的方式相同的方法

1

它改變稱爲x局部變量的值,而不是靜態成員字段名爲x也就是說,它只是0