Java静态变量和局部变量
我是Java新手,遇到了一个OCJA-1.8示例问题,对此我有些怀疑。我需要澄清JVM的这种行为
public class Test{
static int x=1;//**This is static class level variable**
public static void main(String[] args){
int[] nums={1,2,3,4,5};
for(int x:nums){ // Local variable declared for for-each loop.
System.out.println(x);
}
}
}
为什么JVM没有将错误作为重复变量抛出,对于每个循环“int x”中声明的变量。静态变量有类级别的作用域吗
# 1 楼答案
当局部变量与静态变量相同时,类的静态变量将被局部变量隐藏
# 2 楼答案
对于在同一范围内声明的两个同名变量,会发生重复变量编译错误:字段或方法声明范围
在您的示例中,每个变量都在一个不同的范围内声明
因此,当您在声明
x
的方法中引用x
时,默认情况下,它引用的变量的范围更近(局部变量x
),因此会隐藏另一个变量(字段变量x
)要引用阴影变量,请执行以下操作:
Test.x
this
关键字:this.x