Java类的初始化顺序(静态 代码块 构造函数等的执行顺序)
Java类的初始化顺序
Java 父类构造函数:父类静态成员变量,父类普通成员变量,父类静态代码块,父类代码块,
子类构造函数: 子类静态成员变量,子类普通成员变量,子类静态代码块,子类代码块
没有继承情况下
-
执行顺序
- 静态成员变量
- 静态代码块
- 普通成员变量
- 普通代码块
- 构造函数
-
总结:
1. 静态->普通 2. 变量->代码块->构造函数 3. 构造函数是最后执行的
3.子类继承父类的情况下
-
执行顺序
- 父类的静态成员变量
- 父类的静态代码块
- 子类的静态成员变量
- 子类的静态代码块
- 父类的成员变量
- 父类的代码块
- 父类的构造函数
- 子类的成员变量
- 子类的代码块
- 子类的构造函数
-
总结:
- 先父类再子类
- 如果子类有静态成员变量和静态代码块,则执行完父类的静态成员变量和静态代码块后,接着执行子类的静态变量和静态代码块,
否则直接按照父类的变量->代码块->构造函数,再执行子类的变量->代码块->构造函数 - 需要注意的是子类的静态变量和静态代码块是优先于父类的普通成员变量和代码块以及构造函数的。
- 这也说明了先静态->再普通是构造函数