java代码的执行顺序,这是一个很基础的问题,但是工作几年之后,你能随口说出来吗?
当然这个问题在工作中几乎遇不到,但是在面试中,也许会被问到
/**
* @Description: 动物 父类
* @author: wangjie
* @createAt: 2019-08-15-21:25
*/
public class Animal {
public Animal() {
System.out.println("父类构造方法");
}
{
System.out.println("父类代码块");
}
static {
System.out.println("父类静态代码块");
}
}
/**
* @Description: 狗 子类
* @author: wangjie
* @createAt: 2019-08-15-21:26
*/
public class Dog extends Animal{
public Dog() {
System.out.println("子类构造方法");
}
{
System.out.println("子类代码块");
}
static {
System.out.println("子类静态代码块");
}
public static void main( String[] args ) {
Dog dog = new Dog();
}
}
执行结果
父类静态代码块
子类静态代码块
父类代码块
父类构造方法
子类代码块
子类构造方法
Process finished with exit code 0
如果要进一步探究是什么原因,那就要从JVM中类的装载机制和实例化机制开始说起.深入理解JVM虚拟机–待续