1、首先建立三个类
1.1 PPDemo.java
public class PPDemo {
static{
System.out.println("PPDemo static...");
}
{
System.out.println("PPDemo ...");
}
public PPDemo() {
System.out.println("PPDemo()....");
}
}
1.2 PDemo.java
public class PDemo extends PPDemo {
static {
System.out.println("PDemo static...");
}
{
System.out.println("PDemo...");
}
PDemo(){
System.out.println("PDemo() ...");
}
}
1.3 CDemo.java
public class CDemo extends PDemo {
static {
System.out.println("CDemo static ....");
}
{
System.out.println("CDemo ....");
}
public CDemo(){
System.out.println(" CDemo() ...");
}
}
2、测试
public class ExtendsDemo {
public static void main(String[] args){
CDemo cDemo=new CDemo();
}
}
结果:
PPDemo static...
PDemo static...
CDemo static ....
PPDemo ...
PPDemo()....
PDemo...
PDemo() ...
CDemo ....
CDemo() ...
结论:
1、静态代码块的最先执行,父类的静态代码块优先于子类执行
2、普通代码块的执行顺序优先于构造方法
3、子类的普通代码块执行顺序低于父类构造方法
4、子类的静态代码块执行顺序高于父类的普通代码快和,构造方法
执行顺序图解