在Java中,static
关键字用于声明静态成员(包括静态变量和静态代码块)。类的初始化顺序主要受到以下因素影响:
例如:
public class MyClass {
static int a;
static {
a = 1;
System.out.println("Static block 1");
}
static int b;
static {
b = 2;
System.out.println("Static block 2");
}
}
输出顺序为:
Static block 1
Static block 2
例如:
public class MyClass {
static int a;
int b;
static {
a = 1;
System.out.println("Static block");
}
public MyClass() {
b = 2;
System.out.println("Constructor");
}
}
输出顺序为:
Static block
Constructor
例如:
public class ParentClass {
static int a;
static {
a = 1;
System.out.println("Parent static block");
}
}
public class ChildClass extends ParentClass {
static int b;
int c;
static {
b = 2;
System.out.println("Child static block");
}
public ChildClass() {
c = 3;
System.out.println("Child constructor");
}
}
输出顺序为:
Parent static block
Child static block
Child constructor
总之,Java中类的初始化顺序主要受到静态成员和非静态成员的声明顺序以及继承关系的影响。静态代码块的执行顺序通常决定了静态变量的初始化顺序,而非静态成员变量的初始化顺序遵循它们在类中出现的顺序。