为什么我们不能在Java的匿名块中初始化静态变量?
例如:
为什么此代码无法编译?
public class A {
{
static int a = 1;
}
}
我得到这个编译错误说
变量a的非法修饰符;只允许决赛
为什么只有决赛?
最佳答案
直接在class
中,一个块是instance initializer block。您不能在实例初始值设定项块中声明静态变量。只需将其从块中删除:
public class A {
static int a=1;
}
创建实例时,将在任何实例构造函数中的代码之前调用实例初始化程序块。因此,您不能在此声明成员(静态或其他)是有道理的。它们是代码,就像在构造函数中一样。例:
import java.util.Random;
public class Example {
private String name;
private int x;
private int y;
{ // This is the
this.x = new Random().nextInt(); // instance
this.y = this.x * 2; // initializer
} // block
public Example() {
this.name = null;
}
public Example(String name) {
this.name = name;
}
}
在上面的代码中,无论使用哪个构造函数,首先发生的都是实例初始化程序块中的代码,其次是所使用的构造函数中的代码。
还有
static
初始化程序块,在加载类时,它们对静态内容也具有相同的作用。它们以关键字static
开头,在上面的链接中更多。