Java空块范围

我想知道使用空块的目的是什么。例如,

    static{

int x = 5;

}

public static void main (String [] args){

int i = 10;

{

int j = 0 ;

System.out.println(x); // compiler error : can't find x ?? why ??

System.out.println(i); // this is fine

}

System.out.println(j); //compiler error : can't find j

}

有人可以解释

  1. 在什么情况下,我们要使用空块。
  2. 空块内的所有变量是否仍在继续stack
  3. 为什么无法访问static variable x

回答:

  1. 您在帖子中显示的块不是空块,而是静态初始化器。它用于为类的静态变量提供非平凡的初始化
  2. 在初始化期间使用的局部变量进入堆栈,但从堆分配的对象除外
  3. 您不能访问静态变量,x因为您没有声明它。而是x在静态初始化程序中声明了局部变量。

如果要创建x静态变量,然后在静态初始化块中对其进行初始化,请执行以下操作:

private static int x;

static {

x = 5;

}

在这种情况下,简单的初始化语法最有效:

private static int x = 5;

初始化程序块保留用于更复杂的工作,例如,当您需要使用循环初始化结构时:

private static List<List<String>> x = new ArrayList<List<String>>();

static {

for (int i = 0 ; i != 10 ; i++) {

x.add(new ArrayList<String>(20));

}

}

以上是 Java空块范围 的全部内容, 来源链接: utcz.com/qa/399447.html

回到顶部