Java静态范围

时间:2012-04-30 17:03:09

标签: java

我有以下代码来自Sun认证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'的值?

5 个答案:

答案 0 :(得分:6)

这是静态初始化块。但是在这种情况下这并不重要,因为它正在修改一个局部变量的值。

答案 1 :(得分:5)

int x = 5;确实已执行,但此处x是一个局部变量,而不是static int x成员。

答案 2 :(得分:1)

它是一个静态块,因此您定义的变量不能超出{}的范围。工作 - 这种感觉 - 与方法相同

答案 3 :(得分:1)

它更改名为x的局部变量的值,但不更改名为x的静态成员字段的值,即它仅为0.

答案 4 :(得分:0)

x的值设置为5,但仅限于静态块

的上下文中
static 
      { 
            int x = 5; 
      }

static int x,y;中声明的变量x具有类级别范围,并受引用它的其余代码的影响。