在java中,一个类可能含有静态代码块、构造代码块、构造函数、静态常量、成员变量,且子类会继承父类相关的功能,在类的初始化和调用时,相关代码块的执行顺序如下:
- 父类静态常量
- 父类静态代码块
- 子类静态常量
- 子类静态代码块
- 父类成员变量
- 父类构造代码块
- 父类构造函数
- 子类成员变量
- 子类构造代码块
- 子类构造函数
测试代码如下:
class Fu { Y y = new Y(); static { System.out.println("我是父类静态代码块"); } { System.out.println("我是父类构造代码块"); } public Fu() { System.out.println("我是父类构造函数"); } } class Y { public Y() { System.out.println("我是成员变量"); } } public class Zi extends Fu { Y y = new Y(); static { System.out.println("我是子类静态代码块"); } { System.out.println("我是子类构造代码块"); } public Zi() { System.out.println("我是子类构造函数"); } public static void main(String[] args) { new Zi(); } }}
执行结果如下:
我是父类静态代码块
我是子类静态代码块
我是成员变量
我是父类构造代码块
我是父类构造函数
我是成员变量
我是子类构造代码块
我是子类构造函数