Java中构造函数、静态代码块、代码块的执行顺序

先看一段代码:

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代码块 > 父类代码块 > 父类构造函数 > 子类代码块 > 子类构造函数
(每创建一个对象,就会执行一次非静态代码块)

你可能感兴趣的:(Java中构造函数、静态代码块、代码块的执行顺序)