下面是一个合法的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
块的工作方式类似。你可以把它想象成一个静态构造函数,一个类的构造函数,而不是构造类的实例(对象)的"普通"构造函数。