含有繼承的類的初始化順序:父類的靜態變量->父類的靜態塊->子類靜態變量->子類靜態初始化塊->父類變量->父類初始化塊->父類的構造函數->子類的變量->子類初始化塊->子類構造函數;(變量和初始化塊之間的先後順序根據類中的先後位置而定)
- public class InitialClassOrderTest extends InitialClassOrderBasic{
- // 靜態變量
- public static String staticField = "靜態變量";
- // 變量
- public String field = "變量";
- // 靜態初始化塊
- static {
- System.out.println(staticField);
- System.out.println("靜態初始化塊");
- }
- // 初始化塊
- {
- System.out.println(field);
- System.out.println("初始化塊");
- }
- // 構造器
- public InitialClassOrderTest() {
- System.out.println("構造器");
- }
- public static void main(String[] args) {
- new InitialClassOrderTest();
- }
- }
- public class InitialClassOrderBasic {
- // 靜態變量
- public static String staticField = "父類靜態變量";
- // 變量
- public String field = "父類變量";
- // 靜態初始化塊
- static {
- System.out.println(staticField);
- System.out.println("父類靜態初始化塊");
- }
- // 初始化塊
- {
- System.out.println(field);
- System.out.println("父類初始化塊");
- }
- // 構造器
- public InitialClassOrderBasic() {
- System.out.println("父類構造器");
- }
- }
執行結果:
- 父類靜態變量
- 父類靜態初始化塊
- 靜態變量
- 靜態初始化塊
- 父類變量
- 父類初始化塊
- 父類構造器
- 變量
- 初始化塊
- 構造器