溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

java中初始化對(duì)象的方法

發(fā)布時(shí)間:2020-06-25 17:26:36 來(lái)源:億速云 閱讀:166 作者:Leah 欄目:編程語(yǔ)言

本篇文章為大家展示了java中初始化對(duì)象的方法,代碼簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。

第一步:加載該類(lèi),一個(gè)java對(duì)象在初始化前會(huì)進(jìn)行類(lèi)加載,在JVM中生成Class對(duì)象。加載一個(gè)類(lèi)會(huì)進(jìn)行如下操作,下面給出遞歸描述。

如果該類(lèi)有父類(lèi),則先加載其父類(lèi)?!   ?/strong>

i 初始化該類(lèi)靜態(tài)成員

ii 執(zhí)行該類(lèi)靜態(tài)代碼塊

第二步:創(chuàng)建對(duì)象,如果該類(lèi)有父類(lèi),則創(chuàng)建對(duì)象時(shí)會(huì)先創(chuàng)建其父類(lèi)的對(duì)象,外層包裹子類(lèi)的屬性和方法,然后返回子類(lèi)的引用,下面給出遞歸描述。

如果該類(lèi)有父類(lèi),先創(chuàng)建父類(lèi)的對(duì)象。

i 初始化該類(lèi)普通成員

ii 執(zhí)行普通代碼塊

iii 調(diào)用該類(lèi)構(gòu)造方法

示例:

該類(lèi)對(duì)象作為成員變量

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

父類(lèi)

public class Parent {
    public static Info info = new Info("Parent static member");      //靜態(tài)成員
    public Info info2 = new Info("Parent common member");            //普通成員
    static {                                                         //靜態(tài)代碼塊
        System.out.println("parent static block");
    }
    {                                                                //普通代碼塊
        System.out.println("parent common block");
    }
    public Parent() {                                                //父類(lèi)構(gòu)造方法
        System.out.println("Parent.Parent()");
    }
}

子類(lèi)

public class Child extends Parent{
    public static Info info = new Info("Child static member");       //靜態(tài)成員
    public Info info2 = new Info("Child common member");             //普通成員
    static {                                                         //靜態(tài)代碼塊
        System.out.println("Child static block");
    }
    {                                                                //普通代碼塊
        System.out.println("Child  common block");
    }
    public Child() {                                                 //子類(lèi)構(gòu)造方法
        System.out.println("Child.Child()");
    }
}

下面測(cè)試類(lèi)的加載過(guò)程,我們不創(chuàng)建對(duì)象,而是直接加載類(lèi),并且是加載子類(lèi)

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();
    }
}

測(cè)試結(jié)果:

java中初始化對(duì)象的方法

測(cè)試結(jié)果符合上面所寫(xiě)的加載類(lèi)的規(guī)則,先初始化父類(lèi)靜態(tài)成員,再執(zhí)行父類(lèi)靜態(tài)塊,然后初始化子類(lèi)靜態(tài)成員,最后執(zhí)行子類(lèi)靜態(tài)塊。我們可以看到靜態(tài)成員確實(shí)在類(lèi)加載時(shí)初始化。

注意:類(lèi)的加載只進(jìn)行一次,之后創(chuàng)建對(duì)象將不再進(jìn)行類(lèi)加載,這也是為什么靜態(tài)代碼塊只執(zhí)行一次的原因。

上述內(nèi)容就是java中初始化對(duì)象的方法,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI