Java静态范围

czc*_*ong 5 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; 
      }
}
Run Code Online (Sandbox Code Playgroud)

测试会询问您此行的结果:

System.out.println(x + y + ++x);
Run Code Online (Sandbox Code Playgroud)

答案是3,但我不完全理解为什么它是3.如果我完全忽略,我可以得到答案:

      static 
      { 
            int x = 5; 
      }
Run Code Online (Sandbox Code Playgroud)

我的问题是,上面代码片段的含义是什么?为什么它不改变变量'x'的值?

use*_*572 6

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

  • @anonymous,谢谢,我明白了.它是作用域,因此变量在范围之后不存在. (2认同)

ass*_*ias 5

int x = 5;确实执行了,但这x是一个局部变量,而不是static int x成员.