程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA編程入門知識 >> 淺談Java中父類與子類的加載順序詳解

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

編輯:JAVA編程入門知識
代碼如下:

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方法中的內容全注釋掉,你會發現只會輸出

    父類--靜態變量
    父類--靜態初始化塊
    子類--靜態變量
        子類--靜態初始化塊
        其它不會輸出了。原因呢? 還要研究
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved