java中代码的加载顺序

java中父子类中的代码的加载顺序

Posted by yishuifengxiao on 2019-08-05

对于很多 java 小白,常常弄不清楚 java 中父类与子类之间的代码的执行顺序,在这里做一个简单的示例,进行一下简单的说明。

下面一个常见的 java 父类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class BaseClass {

static {
System.out.println("I am static in BaseClass");
}


public BaseClass() {

System.out.println("I am construct in BaseClass");
}


{

System.out.println("I am block in BaseClass");

}
}

接下来,构建一个基于 BaseClass 的子类。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class SubClass extends BaseClass {

static {
System.out.println("I am static in SubClass");
}


public SubClass() {

System.out.println("I am construct in SubClass");
}


{

System.out.println("I am block in SubClass");

}
}

测试函数如下:

1
2
3
4
5
public class MainTest {
public static void main(String[] args) {
new SubClass();
}
}

得到的执行结果如下:

1
2
3
4
5
6
I am static in BaseClass
I am static in SubClass
I am block in BaseClass
I am construct in BaseClass
I am block in SubClass
I am construct in SubClass

经过多次测试发现,执行结果与代码块的顺序无关,输出的结果都保持一致。

因此得到的代码的执行的顺序为 :

父类中的静态代码块 —> 子类中的静态代码块 —> 父类中的代码块 —> 父类中的构造函数 —> 子类中的代码块 —> 子类中的构造函数