淺談Java中父類與子類的載入順序詳解

來源:互聯網
上載者:User

複製代碼 代碼如下:class Parent {
// 靜態變數
public static String p_StaticField = "父類--靜態變數";
// 變數(其實這用對象更好能體同這一點,如專門寫一個類的執行個體)
  
//如果這個變數放在初始化塊的後面,是會報錯的,因為你根本沒有被初始化
public String p_Field = "父類--變數";
// 靜態初始化塊
static {
System.out.println(p_StaticField);
System.out.println("父類--靜態初始化塊");
}
// 初始化塊
{
System.out.println(p_Field);
System.out.println("父類--初始化塊");
}
// 構造器
public Parent() {
System.out.println("父類--構造器");
}
}
public class SubClass extends Parent {
// 靜態變數
public static String s_StaticField = "子類--靜態變數";
// 變數
public String s_Field = "子類--變數";
// 靜態初始化塊
static {
System.out.println(s_StaticField);
System.out.println("子類--靜態初始化塊");
}
// 初始化塊
{
System.out.println(s_Field);
System.out.println("子類--初始化塊");
}
// 構造器
public SubClass() {
//super();
System.out.println("子類--構造器");
}
// 程式入口
public static void main(String[] args) {
System.out.println("*************in main***************");
new SubClass();
System.out.println("*************second subClass***************");
new SubClass();
}
}

輸出結果
父類--靜態變數
父類--靜態初始化塊
子類--靜態變數
子類--靜態初始化塊
*************in main***************
父類--變數
父類--初始化塊
父類--構造器
子類--變數
子類--初始化塊
子類--構造器
*************second subClass***************
父類--變數
父類--初始化塊
父類--構造器
子類--變數
子類--初始化塊
子類--構造器

結果分析:
很顯然在載入main方法後,靜態變數不管父類還是子類的都執行了,然後才是父類和子類的的普通變數和構造器。這是因為,當要建立子類這個對象時,發現這個類需要一個父類,所以把父類的.class載入進來,然後依次初始化其普通變數和初始化代碼塊,最後其構造器,然後可以開始子類的工作,把子類的.class載入進來,在做子類的工作。

另外在Java中子類中都會有預設的調用父類的預設建構函式即super(),當僅僅有預設建構函式裡
Java替你做了,我們可以做個實驗,如果在父類中注釋掉預設建構函式,加一個有參的建構函式時,如果
子類中不加super(argument),此時會報語法錯誤
如果我們把Main方法中的內容全注釋掉,你會發現只會輸出

    父類--靜態變數
    父類--靜態初始化塊
    子類--靜態變數
子類--靜態初始化塊
其它不會輸出了。原因呢? 還要研究

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.