静态块与静态声明在变量方面 [Java]



下面是一个合法的Java程序,运行良好,打印5。

有人可以帮助我了解静态块中的变量是怎么回事。为什么 x 可以合法声明两次?静态声明是否优先于静态块?

静态块变量"x">

是否掩盖了在这个小程序顶部声明的静态变量"x"?如果是这样,如何访问它?

public class App {

static int x = 2;
static int z;

static{
int x = 3;
z = x;
}

public static void main(String args[]){   
System.out.println(x+z); //Output is 5.
}             
}

谢谢。

静态块中的x是静态块的局部变量,它隐藏static int x。它不是静态变量x的另一个声明 - 它是static块内x局部变量的声明。为了访问外部x,您可以使用static块内部的App.x引用它,就像在其他地方一样。

该行为与在类的构造函数中声明局部变量没有什么不同:

public class App {
int i = 0;
int j;
public App() {
int i = 2; // This i is a local variable in the constructor
j = i;
}
}

构造函数中的i是一个局部变量,它隐藏this.i,但是一旦构造函数被执行,局部i就会丢失,并且this.i保持0,就像最初声明的那样。

static块的工作方式类似。你可以把它想象成一个静态构造函数,一个类的构造函数,而不是构造类的实例(对象)的"普通"构造函数。

最新更新