我有以下代码来自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'的值?
答案 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具有类级别范围,并受引用它的其余代码的影响。