1、首先建立三个类
![在这里插入图片描述](https://img-blog.csdn.net/20181018145643949?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NoYW5femhpX2p1bg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
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、子类的静态代码块执行顺序高于父类的普通代码快和,构造方法
执行顺序图解
![在这里插入图片描述](https://img-blog.csdn.net/20181018150901907?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NoYW5femhpX2p1bg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)