初始化順序:父類的靜態變量-->父類的靜態代碼塊-->子類的靜態變量-->子類的靜態代碼快-->父類的非靜態變量(父類的非靜態代碼塊)-->父類的構造函數-->子類的非靜態變量(子類的非靜態代碼塊)-->子類的構造函數
值得注意的是:父類的非靜態變量(父類的非靜態代碼塊)是同一級的,看哪個部分寫在類的最前面誰就先被執行,子類的非靜態變量(子類的非靜態代碼塊)也是一樣。###
驗證代碼:
package com.hts.test;
public class Test {
public static void main(String[] args) {
Child c=new Child();
}
}
class Parent {
public static PrintMessage a=new PrintMessage("父類靜態成員被初始化");
private PrintMessage b=new PrintMessage("父類非靜態成員被初始化");
static{
System.out.println("父類的靜態代碼塊被執行");
}
{
System.out.println("父類的非靜態代碼塊被執行");
}
public Parent(){
System.out.println("父類的構造方法被執行");
}
}
class Child extends Parent{
public static PrintMessage a1=new PrintMessage("子類靜態成員被初始化");
private PrintMessage b1=new PrintMessage("子類非靜態成員被初始化");
static {
System.out.println("子類的靜態代碼塊被執行");
}
{
System.out.println("子類的非靜態代碼塊被執行");
}
public Child(){
System.out.println("子類的構造函數被執行");
}
}
class PrintMessage{
public PrintMessage(String mes){
System.out.println(mes);
}
}
輸出結果: