有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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”中声明的变量。静态变量有类级别的作用域吗


共 (2) 个答案

  1. # 1 楼答案

    当局部变量与静态变量相同时,类的静态变量将被局部变量隐藏

  2. # 2 楼答案

    对于在同一范围内声明的两个同名变量,会发生重复变量编译错误:字段或方法声明范围
    在您的示例中,每个变量都在一个不同的范围内声明
    因此,当您在声明x的方法中引用x时,默认情况下,它引用的变量的范围更近(局部变量x),因此会隐藏另一个变量(字段变量x

    要引用阴影变量,请执行以下操作:

    • 如果它是一个静态字段(您的案例),请在它前面加上声明它的类名:Test.x
    • 如果是实例字段,则在其前面加上this关键字:this.x