Java類加載機(jī)制的理解淺析

從今日頭條上看到了一道考察Java類加載機(jī)制的基礎(chǔ)題诫肠,感覺不錯(cuò)菩貌,只是沒有看到答案卢佣,所以自己手動(dòng)敲了一下代碼,現(xiàn)將其整理如下:

題目

1.父類A箭阶、子類B(繼承自父類A)虚茶、程序入口類C
public class HelloA {

    public HelloA() {
        System.out.println("父類A 構(gòu)造方法");
    }
    
    { System.out.println("父類A 構(gòu)造代碼塊"); }
    
    static { System.out.println("父類A 靜態(tài)方法"); }
}

public class HelloB extends HelloA {
    
    public HelloB() {
        System.out.println("子類B 構(gòu)造方法");
    }
    
    { System.out.println("子類B 構(gòu)造代碼塊"); }
    
    static { System.out.println("子類B 靜態(tài)方法"); }
}

//程序入口類
public class HelloC {

    public static void main(String[] args){
        
        System.out.println("-----------main start-----------");
        new HelloB();
        System.out.println("-----------main end-------------");
    }
}

運(yùn)行結(jié)果如下:

-----------main start-----------
父類A 靜態(tài)方法
子類B 靜態(tài)方法
父類A 構(gòu)造代碼塊
父類A 構(gòu)造方法
子類B 構(gòu)造代碼塊
子類B 構(gòu)造方法
-----------main end-------------

2.父類A、子類B(繼承自父類A)仇参,程序入口在B類中

public class HelloA {

    public HelloA() {
        System.out.println("HelloA");
    }
    
    { System.out.println("I'm A class."); }
    
    static { System.out.println("Static A"); }
}

public class HelloB extends HelloA {
    
    public HelloB() {
        System.out.println("HelloB");
    }
    
    { System.out.println("I'm B class."); }
    
    static { System.out.println("Static B"); }

    public static void main(String[] args){
        
        System.out.println("-----------main start-----------");
        new HelloB();
        System.out.println("-----------main end-------------");
    }
}

運(yùn)行結(jié)果如下:

父類A 靜態(tài)方法
子類B 靜態(tài)方法
-----------main start-----------
父類A 構(gòu)造代碼塊
父類A 構(gòu)造方法
子類B 構(gòu)造代碼塊
子類B 構(gòu)造方法
-----------main end-------------

3.父類A嘹叫、子類B(繼承自父類A),程序入口在A類中

public class HelloA {

    public HelloA() {
        System.out.println("HelloA");
    }
    
    { System.out.println("I'm A class."); }
    
    static { System.out.println("Static A"); }

    public static void main(String[] args){
        
        System.out.println("-----------main start-----------");
        new HelloB();
        System.out.println("-----------main end-------------");
    }
}

public class HelloB extends HelloA {
    
    public HelloB() {
        System.out.println("HelloB");
    }
    
    { System.out.println("I'm B class."); }
    
    static { System.out.println("Static B"); }
}

運(yùn)行結(jié)果如下:

父類A 靜態(tài)方法
-----------main start-----------
子類B 靜態(tài)方法
父類A 構(gòu)造代碼塊
父類A 構(gòu)造方法
子類B 構(gòu)造代碼塊
子類B 構(gòu)造方法
-----------main end-------------

簡(jiǎn)單總結(jié):

1.實(shí)例化子類的時(shí)候
(1)若此類未被加載過诈乒,首先加載是父類的類對(duì)象罩扇,然后加載子類的類對(duì)象,接著實(shí)例化父類抓谴,最后實(shí)例化子類;
(2)若此類被加載過暮蹂,不再加載父類和子類的類對(duì)象。

2.接下來是加載順序
(1)當(dāng)加載類對(duì)象時(shí)癌压,首先初始化靜態(tài)屬性仰泻,然后執(zhí)行靜態(tài)塊;
(2)當(dāng)實(shí)例化對(duì)象時(shí)滩届,首先執(zhí)行構(gòu)造塊(直接寫在類中的代碼塊)集侯,然后執(zhí)行構(gòu)造方法被啼。
(3)如果存在多個(gè)靜態(tài)塊,各靜態(tài)塊之間執(zhí)行的順序按代碼先后棠枉;如果存在多個(gè)靜態(tài)屬性浓体,各靜態(tài)屬性初始化的順序按代碼先后。
(4)屬性辈讶、構(gòu)造塊(也就是上面的實(shí)例塊)命浴、構(gòu)造方法之間的執(zhí)行順序(但構(gòu)造塊一定會(huì)在構(gòu)造方法前執(zhí)行),也是按代碼的先后順序贱除。
3.還要注意入口函數(shù)位置生闲、類的執(zhí)行順序;

本人java小白月幌,有錯(cuò)誤還請(qǐng)指出碍讯,共同學(xué)習(xí)...

參考資料:
(1)Java---類加載機(jī)制,構(gòu)造方法扯躺,靜態(tài)變量捉兴,(靜態(tài))代碼塊国葬,父類灼狰,變量加載順序
https://www.cnblogs.com/chihirotan/p/6043442.html
(2)一道網(wǎng)易Java工程師面試題看出你對(duì)Java類加載機(jī)制的理解深淺
http://url.cn/57lX6cG

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蜓萄,一起剝皮案震驚了整個(gè)濱河市好啰,隨后出現(xiàn)的幾起案子互捌,更是在濱河造成了極大的恐慌铝耻,老刑警劉巖慈格,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件仍秤,死亡現(xiàn)場(chǎng)離奇詭異失暂,居然都是意外死亡彼宠,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門弟塞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來凭峡,“玉大人,你說我怎么就攤上這事决记〈菁剑” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵系宫,是天一觀的道長(zhǎng)索昂。 經(jīng)常有香客問我,道長(zhǎng)扩借,這世上最難降的妖魔是什么椒惨? 我笑而不...
    開封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮潮罪,結(jié)果婚禮上康谆,老公的妹妹穿的比我還像新娘领斥。我一直安慰自己,他們只是感情好沃暗,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開白布月洛。 她就那樣靜靜地躺著,像睡著了一般孽锥。 火紅的嫁衣襯著肌膚如雪嚼黔。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天惜辑,我揣著相機(jī)與錄音隔崎,去河邊找鬼。 笑死韵丑,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的虚缎。 我是一名探鬼主播撵彻,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼实牡!你這毒婦竟也來了陌僵?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤创坞,失蹤者是張志新(化名)和其女友劉穎碗短,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體题涨,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡偎谁,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了纲堵。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片巡雨。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖席函,靈堂內(nèi)的尸體忽然破棺而出铐望,到底是詐尸還是另有隱情,我是刑警寧澤茂附,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布正蛙,位于F島的核電站,受9級(jí)特大地震影響营曼,放射性物質(zhì)發(fā)生泄漏乒验。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一蒂阱、第九天 我趴在偏房一處隱蔽的房頂上張望徊件。 院中可真熱鬧奸攻,春花似錦、人聲如沸虱痕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽部翘。三九已至硝训,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間新思,已是汗流浹背窖梁。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留夹囚,地道東北人纵刘。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像荸哟,于是被迫代替她去往敵國(guó)和親假哎。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容