顺序:
注意:static成员只在类初始加载时,初始化一次。
- 父类static代码块
- 父类static成员变量
- 子类static代码块
- 子类static成员变量
- 父类成员变量
- 父类构造代码块
- 父类构造函数
- 子类成员变量
- 子类构造代码块
- 子类构造函数
class Father {
static {
System.out.println("父类static代码块");
}
private static int value1 = method1();
private int value2 = method2();
{
System.out.println("父类构造代码块");
}
Father() {
System.out.println("父类构造函数");
}
public static int method1() {
System.out.println("父类static成员变量");
return 0;
}
public int method2() {
System.out.println("父类成员变量");
return 0;
}
}
class Son extends Father {
static {
System.out.println("子类static代码块");
}
private static int value1 = method3();
private int value2 = method4();
{
System.out.println("子类构造代码块");
}
Son() {
System.out.println("子类构造函数");
}
public static int method3() {
System.out.println("子类static成员变量");
return 0;
}
public int method4() {
System.out.println("子类成员变量");
return 0;
}
}
public class Test {
public static void main(String[] args) {
Son f = new Son();
System.out.println();
Son f2 = new Son();
}
}
输出结果:
父类static代码块
父类static成员变量
子类static代码块
子类static成员变量
父类成员变量
父类构造代码块
父类构造函数
子类成员变量
子类构造代码块
子类构造函数
父类成员变量
父类构造代码块
父类构造函数
子类成员变量
子类构造代码块
子类构造函数
进程已结束,退出代码为 0