示例代碼
public class HelloA {
private static String staticStr = getStaticStr();
private String str = getStr();
//父類構造方法
public HelloA(){
System.out.println("父類構造方法");
}
//父類代碼塊
{
System.out.println("父類代碼塊");
}
//靜態代碼塊
static{
System.out.println("父類靜態代碼塊");
}
//父類靜態屬性初始化
private static String getStaticStr() {
System.out.println("父類靜態屬性初始化");
return null;
}
private String getStr() {
System.out.println("父類實例屬性初始化");
return null;
}
}
class HelloB extends HelloA {
private static String staticStr = getStaticStr();
private String str = getStr();
//構造方法
public HelloB(){
System.out.println("子類構造方法");
}
//子類代碼塊
{
System.out.println("子類代碼塊");
}
//子類靜態代碼塊
static{
System.out.println("子類靜態代碼塊");
}
//子類靜態屬性
private static String getStaticStr() {
System.out.println("子類靜態屬性初始化");
return null;
}
//子類實例屬性初始化
private String getStr() {
System.out.println("子類實例屬性初始化");
return null;
}
}
執行一次 new HelloB();
執行順序:加載父類類對象:父類靜態屬性 > 父類靜態塊>
加載子類類對象:子類靜態屬性>子類靜態塊 >
父類實例化:父類實例屬性初始化 > 父類普通代碼塊>父類構造方法 >
子類實例化:子類實例屬性初始化 > 子類普通代碼塊>子類構造方法>
執行多次 new HelloB(); new HelloB() (此類被加載過,不再加載父類和子類的類對象,則只加載一次)
執行順序:加載父類類對象:父類靜態屬性 > 父類靜態塊>
加載子類類對象:子類靜態屬性>子類靜態塊 >
父類實例化:父類實例屬性初始化 > 父類普通代碼塊>父類構造方法 >
子類實例化:子類實例屬性初始化 > 子類普通代碼塊>子類構造方法>
父類實例化:父類實例屬性初始化 > 父類普通代碼塊>父類構造方法 >
子類實例化:子類實例屬性初始化 > 子類普通代碼塊>子類構造方法>