对于很多 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
|
经过多次测试发现,执行结果与代码块的顺序无关,输出的结果都保持一致。
因此得到的代码的执行的顺序为 :
父类中的静态代码块 —> 子类中的静态代码块 —> 父类中的代码块 —> 父类中的构造函数 —> 子类中的代码块 —> 子类中的构造函数