初始化顺序:
-
对于一个单独的类而言:
- 静态部分(静态成员变量 + 静态代码块):按照定义顺序进行初始化
- 普通成员(普通成员变量 + 普通代码块):按照定义顺序进行初始化
- 构造函数
-
对于有父类而言:
- 父类静态部分
- 子类静态部分
- 父类普通成员
- 父类构造器
- 子类普通成员
- 子类构造器
-
由于静态变量在普通成员之前初始化,所以可以在静态变量定义顺序之前使用。
栗子:
class BaseTest {
public int a = 21;
{
System.out.println("父类普通代码块: " + a);
}
public static int b = 22;
static {
System.out.println("父类静态代码块: " + b);
}
public BaseTest() {
System.out.println("父类构造器");
}
}
public class Test extends BaseTest {
public int a = 23;
{
System.out.println("子类普通代码块: " + a);
}
public static int b = 24;
static {
System.out.println("子类静态代码块: " + b);
}
public Test() {
System.out.println("子类构造器");
}
public static void main(String[] args) {
new Test();
}
}
运行结果:
父类静态代码块: 22
子类静态代码块: 24
父类普通代码块: 21
父类构造器
子类普通代码块: 23
子类构造器
网友评论