从一段代码看Java代码的执行顺序

活在信息时代 2023-04-07 22:32:32

对于很多同学而言,Java里面的执行顺序一直都是一个比较重要的话题。很多程序员在面试时的时候,也会被问到这类问题。那么,我们下面就通过一个例子,来看一下,Java中的代码执行顺序是怎样的。

我们先来看一个问题,下面的代码,执行出来的结果是什么样的呢?

class Bird {

{

System.out.print("b1 ");

}

static {

System.out.print("r4 ");

}

public Bird() {

System.out.print("b2 ");

}

}

class Raptor extends Bird {

static {

System.out.print("r1 ");

}

public Raptor() {

System.out.print("r2 ");

}

{

System.out.print("r3 ");

}

}

class Hawk extends Raptor {

public static void main(String[] args) {

System.out.print("pre ");

new Hawk();

System.out.println("hawk ");

}

}

答案是:r4 r1 pre b1 b2 r3 r2 hawk

为什么是这样呢?原因就在于Java的执行顺序。

对于Java而言,其执行顺序为:

jvm加载时:父类静态代码块 > 子类静态代码块

生成对象时:父类构造块 > 父类构造方法 > 子类构造块 > 子类构造方法

所以我们可以看到,jvm加载时,代码首先执行的是父类中的static代码块,打印出r4。

然后执行了子类中的static代码块,打印出r1。

然后执行main函数中的打印pre。

然后执行父类构造块,打印出b1。

然后执行父类构造方法,打印出b2。

然后执行子类构造块,打印出r3。

然后执行子类构造方法,打印出r2。

最后执行main函数中构造对象之后的打印hawk。

0 阅读:61
活在信息时代

活在信息时代

关注信息时代的技术发展与社会伦理变迁