public class ExA {
static {
System.out.println("父类--静态代码块");
}
public ExA() {
System.out.println("父类--构造函数");
}
{
System.out.println("父类--非静态代码块");
}
public static void main(String[] args) {
new ExB();
}
}
class ExB extends ExA {
static {
System.out.println("子类--静态代码块");
}
{
System.out.println("子类--非静态代码块");
}
public ExB() {
System.out.println("子类--构造函数");
}
}
执行结果
=====
父类--静态代码块
子类--静态代码块
父类--非静态代码块
父类--构造函数
子类--非静态代码块
子类--构造函数
原因:java类加载分为三个阶段,加载、连接、初始化
静态块是在加载过程中执行的,只有一次
构造块和构造方法是在初始化阶段执行的,每new一次都会执行一次,且构造块属于所有对象,构造方法属于每个对象