下面是一个合法的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.
}
}
三江源。
答案 0 :(得分:1)
静态块中的x
是静态块的 local 变量,它会隐藏static int x
。它是 not 静态变量x
的另一个声明 - 它是x
块内的本地变量static
的声明。要访问外部x
,您可以在App.x
块中使用static
引用它,就像在其他地方一样。
行为与在类的构造函数中声明局部变量没有什么不同:
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
会停留{最初声明的{1}}。
0
块的工作方式类似。你可以认为它有点像静态构造函数,类的构造函数,而不是" normal"构造类,构造类的实例(对象)。