最常见的例子:
public class TestCode {
public static void main(String[] args) {new Son();
System.out.println("----------------------");
new Son();
}
}
// 父类
class Father {
static {
System.out.println("父类静态代码块");
}
static Fruit fruit = new Fruit();
Animal animal = new Animal();
{
System.out.println("父类代码块");
}
public Father() {
System.out.println("父类构造函数");
}
}
class Fruit {
public Fruit() {
System.out.println("父类静态成员变量初始化");
}
}
class Animal {
public Animal() {
System.out.println("父类成员变量初始化");
}
}
// 子类
class Son extends Father {
Cat cat = new Cat();
{
System.out.println("子类代码块初始化");
}
static Apple apple = new Apple();
static {
System.out.println("子类静态代码块");
}
public Son() {
System.out.println("子类构造函数");
}
class Cat{
public Cat() {
System.out.println("子类成员变量初始化");
}
}
static class Apple {
public Apple() {
System.out.println("子类静态变量初始化");
}
}
}
输出结果:
父类静态代码块
父类静态成员变量初始化
子类静态变量初始化
子类静态代码块
父类成员变量初始化
父类代码块
父类构造函数
子类成员变量初始化
子类代码块初始化
子类构造函数
----------------------
父类成员变量初始化
父类代码块
父类构造函数
子类成员变量初始化
子类代码块初始化
子类构造函数