这里主要介绍静态代码块(static initialization block)、非静态代码块(initialization block)和构造函数(constrouctor)。
当他们在同一个类中同时出现时(不包含继承的情况),初始化的顺序为:
$静态代码块>非静态代码块>构造函数$
举个例子:
1 |
|
结果为:
A的静态代码块
A的非静态代码块
A的构造函数
A的非静态代码块
A的有参构造函数,name =lili
并且上面我故意将非静态代码块放到静态代码块之前,但是依然不能改变静态代码块先执行的结果。其中静态代码块在程序运行时只执行一次。
当出现继承情况时
1 |
|
这里B继承的是上面的A,其结果为:
A的静态代码块
B的静态代码块
A的非静态代码块
A的构造函数
B的非静态代码块
B的构造函数
- 可以看出静态代码块是第一个执行的,当父类也含有静态代码块时,先执行父类的静态代码块。
- 除去静态代码块,构造函数和非静态代码块都是递归调用执行。