2012-04-30 34 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