为什么我们不能在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开头,在上面的链接中更多。

10-07 22:26