静态块与静态声明的变量[Java]

时间:2017-12-03 23:32:42

标签: java static

下面是一个合法的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.
  }             

}

三江源。

1 个答案:

答案 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"构造类,构造类的实例(对象)。