Java中静态代码块、代码块以及构造函数执行顺序的解决。

在JavaSE的基础笔试题中经常会出现这三个的一个执行顺序,那么他们的执行顺序究竟是怎么样的呢?通过代码我们可以直接看一下最终结果(代码如下)
Java中静态代码块、代码块以及构造函数执行顺序的解决。
最终输出结果如下

Java中静态代码块、代码块以及构造函数执行顺序的解决。
`可以看出到实际上执行顺序应该是父类静态代码块——>子类静态代码块——>父类代码块——>父类构造方法——>子类代码块——>子类构造方法,但是为什么会这样呢?其实当我们在创建子类时,实际上子类的构造方法的第一行存在一个隐式的super,super是一个指向父类的指针,所以在执行构造方法时会通过super来指向父类同时会执行父类的构造方法。
我们都知道静态代码块是最优先执行的,且只会执行一次,当子类的super在调用父类的构造方法时所以先回去执行父类的静态代码块,然后执行子类的静态代码块

**

但是为什么代码块的执行顺序会比构造方法先呢?我们通过反编译工具来看一下

**
Java中静态代码块、代码块以及构造函数执行顺序的解决。

结论:

**通过反编译工具发现,代码块实际上是被放到了构造方法中,且是放在了构造方法的第一句,那么就不难解释为什么代码块会比构造方法执行顺序考前了,其实在我们执行子类的构造方法时,子类super指向父类的构造方法同时执行父类的构造方法,由于静态代码块执行是优先于main方法的,所以先回去执行父类的静态代码块再执行子类的静态代码块,然后此时super由于指向父类需要去执行父类的构造方法,且代码块会被转换到构造方法的第一行,所以此时就会执行父类的代码块以及构造方法,当super执行完毕回到子类时,由于子类的代码块也被放到了构造方法中,且在super之后所以执行子类代码块再执行子类构造方法。
————————————————