Java静态作用域

5

我有一段代码,这段代码来自于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个回答

6
那是一个"静态初始化块"。但在这个上下文中并不重要,因为它只是修改了局部变量的值。

2
@匿名者,谢谢,我明白了。它是有作用域的,所以变量在作用域之后不存在。 - czchlong

5

int x = 5;会被执行,但这里的x是一个局部变量,而不是static int x成员变量。


1

这是一个静态块,因此您在其中定义的变量不能超出{}的范围。在这个意义上,它的工作方式与方法相同。


1

它改变了名为x的局部变量的值,但不会改变名为x的静态成员字段,即它仍然是0。


0

x的值被设置为5,但仅在静态块的上下文中有效

static 
      { 
            int x = 5; 
      }

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接