在java中初始化静态变量

byt*_*orm 2 java static initialization

究竟是什么意思"静态变量在加载类时被初始化"?我在网上阅读了很多讨论,但我仍感到困惑.第2步是初始化步骤,对吧?然后在第1步"加载类时"会发生什么?

 public class NewClass {
    static int[] arr; //Step 1
    NewClass(){
        arr = new int[10]; //Step 2
        for(int i= 0;i<10;i++){
            arr[i] = i;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Epi*_*rce 6

如果要在加载类时初始化它,则应使用static初始化程序:

public class NewClass {
    static int[] arr; //Step 1

    static {
        arr = new int[10]; //Step 2
        for(int i= 0;i<10;i++){
            arr[i] = i;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Era*_*ran 5

在构造函数中初始化静态成员违背了静态成员的目的,因为它们不属于任何实例,并且您将创建的每个新实例都将覆盖静态数组的值。

您应该在声明静态变量时或在静态初始化块中对其进行初始化。

static int[] arr = new int[10];
Run Code Online (Sandbox Code Playgroud)

或者

static {
    arr = new int[10];
}
Run Code Online (Sandbox Code Playgroud)

初始化(即静态声明和静态初始化块的执行)将在类加载时发生,这发生在您的应用程序第一次访问类的任何成员(构造函数、静态方法、静态变量)时。