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)
如果要在加载类时初始化它,则应使用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)
在构造函数中初始化静态成员违背了静态成员的目的,因为它们不属于任何实例,并且您将创建的每个新实例都将覆盖静态数组的值。
您应该在声明静态变量时或在静态初始化块中对其进行初始化。
static int[] arr = new int[10];
Run Code Online (Sandbox Code Playgroud)
或者
static {
arr = new int[10];
}
Run Code Online (Sandbox Code Playgroud)
初始化(即静态声明和静态初始化块的执行)将在类加载时发生,这发生在您的应用程序第一次访问类的任何成员(构造函数、静态方法、静态变量)时。
| 归档时间: |
|
| 查看次数: |
1016 次 |
| 最近记录: |