5

我有以下一段取自 Sun Certified Java Programmer 模拟考试的代码:

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 回答