先看一段代码:
package com.wjj.test;
/**
* @author 作者 : 榨菜哥
* @createTime 创建时间:2018年7月27日 下午3:26:47
* @discription 类说明:
* @version 版本:
*/
public class ConstructorTest {
public static void main(String[] args) {
Dog dog = new Dog();
}
}
class Animal {
String name;
int age;
public Animal() {
System.out.println("Animal 类");
}
{
System.out.println("Animal 代码块");
}
static {
System.out.println("Animal static块");
}
}
class Dog extends Animal {
public Dog() {
System.out.println("Dog 类");
}
{
System.out.println("Dog 代码块");
}
static {
System.out.println("Dog static 块");
}
}
执行上面代码输出结果:
Animal static块
Dog static 块
Animal 代码块
Animal 类
Dog 代码块
Dog 类
总结:
static代码块、代码块、构造函数的执行顺序为:
父类static代码块 > 子类static代码块 > 父类代码块 > 父类构造函数 > 子类代码块 > 子类构造函数
(每创建一个对象,就会执行一次非静态代码块)