首頁  >  文章  >  Java  >  java中的物件怎麼初始化

java中的物件怎麼初始化

王林
王林原創
2019-11-20 16:33:554445瀏覽

java中的物件怎麼初始化

第一步:載入該類,一個java物件在初始化前會進行類別加載,在JVM中產生Class物件。載入一個類別會進行如下操作,下面給出遞歸描述。

如果該類別有父類,則先載入其父類。

i 初始化該類別靜態成員

#ii 執行該類別靜態程式碼區塊

第二步:建立對象,如果該類有父類,則創建對象時會先創建其父類的對象,外層包裹子類的屬性和方法,然後返回子類的引用,下面給出遞歸描述。

如果該類別有父類,先建立父類別的物件。

i 初始化該類別普通成員

#ii 執行普通程式碼區塊

iii 呼叫該類別建構方法

範例:

該類別物件作為成員變數

public class Info{    public Info(String s) {
        System.out.println(s);
    }
}

父類別

public class Parent {
    public static Info info = new Info("Parent static member");      //静态成员
    public Info info2 = new Info("Parent common member");            //普通成员
    static {                                                         //静态代码块
        System.out.println("parent static block");
    }
    {                                                                //普通代码块
        System.out.println("parent common block");
    }
    public Parent() {                                                //父类构造方法
        System.out.println("Parent.Parent()");
    }
}

子類

public class Child extends Parent{
    public static Info info = new Info("Child static member");       //静态成员
    public Info info2 = new Info("Child common member");             //普通成员
    static {                                                         //静态代码块
        System.out.println("Child static block");
    }
    {                                                                //普通代码块
        System.out.println("Child  common block");
    }
    public Child() {                                                 //子类构造方法
        System.out.println("Child.Child()");
    }
}

下面測試類的載入過程,我們不建立對象,而是直接載入類,並且是載入子類

public class InitObjectTest{
    public static void main(String[] args) {
        try{
            //Class.forName("Parent");
            Class.forName("Child");
        }catch(Exception e){
            
        }
        //System.out.println("=============== now , we create an Object below ===========");
        //new Parent();
    }
}

測試結果:

java中的物件怎麼初始化

測試結果符合上面所寫的載入類別的規則,先初始化父類別靜態成員,再執行父類別靜態區塊,然後初始化子類別靜態成員,最後執行子類別靜態區塊。我們可以看到靜態成員確實在類別載入時初始化。

注意:類別的載入只進行一次,之後建立物件將不再進行類別加載,這也是為什麼靜態程式碼區塊只執行一次的原因。

推薦教學:java入門教學

以上是java中的物件怎麼初始化的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn