Java8变量范围

时间:2018-07-17 20:16:09

标签: java variables scope

我在准备OCAJP考试时参加了模拟考试,我遇到了以下有关变量和变量范围的问题。

.navbar-collapse

,以上代码的输出为“ 3”。 但是我无法弄清楚为什么输出为3。我可以理解,如果在IF块之外可以看到if块中的“ int x = 4”。但是不应该“ final int x = 10;”因为已经有x作为静态变量,所以使编译器偏离轨道了吗?

1 个答案:

答案 0 :(得分:5)

让我们按照代码顺序来做。

static int x = 2;

这声明了一个名为x的静态类变量,该变量已初始化为2

if(x>1)

这是指静态类变量,因为x的其他声明尚未发生。

    x++;

这会将静态类变量x增加到3

    int x = 4;

这将声明一个新的局部变量x,该变量与静态类变量x不同,并将其初始化为4。这个新的局部变量阴影静态类变量。但是,它立即超出范围。其范围仅限于if块。在声明之后和超出范围之前,不会引用它。

System.out.println(x);

这将打印范围中唯一的x,即静态类变量3。上面声明的本地x超出范围,并且不再覆盖静态类变量。

final int x = 10;

此声明另一个新的局部变量x,也不同于静态类变量x,并且不同于先前在x块中声明的范围if ,并将其初始化为10。这个新的局部变量阴影静态类变量。但是,它也立即超出范围。它的范围仅限于main方法块。在声明之后和超出范围之前也不会引用它。

要点是:

  • 局部变量可以阴影同名的类变量。但是,它只是在自己的本地范围内这样做。
  • 尚未声明的变量还没有覆盖类变量。