- 加载父类,执行静态代码(包括静态成员变量和静态代码块,从上到下执行)
- 加载子类,执行静态代码
- 初始化父类对象属性(非静态的成员变量初始化为0)
- 执行父类匿名代码块(非静态的成员变量的赋值语句和匿名代码块)
- 执行父类构造方法(构造方法中的语句)
- 初始化子类对象属性
- 执行子类匿名代码块
- 执行子类构造方法
蓝色为创建对象时会执行的代码,黄底为父类执行的代码。
当类加载结束后,不会再执行静态代码。
package com.briup.day10;
class Father {
String fa = "fa";
static String fb = "fb";
static {
System.out.print("1. Father static code ");
System.out.println("and static var: " + fb);
}
{
System.out.println("3. Father var: " + fa);
System.out.println("4. Father lambda code");
}
public Father() {
System.out.println("5. Father Constuctor");
}
}
class Son extends Father {
String sa = "sa";
static String sb = "sb";
static {
System.out.print("2. Son static code ");
System.out.println("and static var: " + sb);
}
{
System.out.println("6. Son var: " + sa);
System.out.println("7. Son lambda code");
}
public Son() {
System.out.println("8. Son Constuctor");
}
}
public class StaticsTest {
public static void main(String[] args) {
new Son();
System.out.println("--------");
new Son();
}
}
运行结果为:
- Father static code and static var: fb
- Son static code and static var: sb
- Father var: fa
- Father lambda code
- Father Constuctor
- Son var: sa
- Son lambda code
- Son Constuctor
- Father var: fa
- Father lambda code
- Father Constuctor
- Son var: sa
- Son lambda code
- Son Constuctor