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
}
有人可以解释
- 在什么情况下,我们要使用空块。
- 空块内的所有变量是否仍在继续
stack
? - 为什么无法访问
static variable x
?
回答:
- 您在帖子中显示的块不是空块,而是静态初始化器。它用于为类的静态变量提供非平凡的初始化
- 在初始化期间使用的局部变量进入堆栈,但从堆分配的对象除外
- 您不能访问静态变量,
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