Java類加載順序

先看一段代碼:

public class Text {
    public static int k = 0;
    public static Text t1 = new Text("t1");
    public static Text t2 = new Text("t2");
    public static int i = print("i");
    public static int n = 99;
    public int j = print("j");

    {
        print("構(gòu)造塊");
    }
    static {
        print("靜態(tài)塊");
    }

    public Text(String str) {
        System.out.println((++k) + ":" + str + "   i=" + i + "    n=" + n);
        ++i;
        ++n;
    }

    public static int print(String str) {
        System.out.println((++k) + ":" + str + "   i=" + i + "    n=" + n);
        ++n;
        return ++i;
    }

    public static void main(String args[]) {
        Text t = new Text("init");
    }
}

輸出結(jié)果為:
1:j i=0 n=0
2:構(gòu)造塊 i=1 n=1
3:t1 i=2 n=2
4:j i=3 n=3
5:構(gòu)造塊 i=4 n=4
6:t2 i=5 n=5
7:i i=6 n=6
8:靜態(tài)塊 i=7 n=99
9:j i=8 n=100
10:構(gòu)造塊 i=9 n=101
11:init i=10 n=102

加載過程分析

執(zhí)行main時挣饥,先加載所在類,聲明靜態(tài)變量排宰,并初始化靜態(tài)變量執(zhí)行靜態(tài)代碼塊(按順序執(zhí)行)

初始化到t1時褐鸥,暫停類加載线脚,先實例化,此時k=0叫榕,而i浑侥,n都未初始化,系統(tǒng)默認值為0
初始化j時晰绎,k自增為1寓落,i,n為0荞下,輸出“1:j i=0 n=0”伶选,n,i自增為1
執(zhí)行代碼塊,輸出“2:構(gòu)造塊 i=1 n=1”尖昏,n,i自增為2
執(zhí)行構(gòu)造函數(shù)仰税,輸出“3:t1 i=2 n=2”,n,i自增為3

初始化到t2時抽诉,暫停類加載陨簇,先實例化,此時k=3掸鹅,i塞帐,n都還未初始化拦赠,但已自增為3
初始化j時,k自增為4葵姥,i荷鼠,n未初始化為3,輸出“4:j i=3 n=3”榔幸,n,i自增為4
執(zhí)行代碼塊允乐,輸出“5:構(gòu)造塊 i=4 n=4”,n,i自增為5
執(zhí)行構(gòu)造函數(shù)削咆,輸出“6:t2 i=5 n=5”牍疏,n,i自增為6

初始化i,輸出“7:i i=6 n=6”拨齐,n,i自增為7鳞陨,返回自增后的i賦值給i
初始化n,賦值99
執(zhí)行靜態(tài)塊瞻惋,輸出“8:靜態(tài)塊 i=7 n=99”厦滤,i自增為8,n自增為100

完成類加載歼狼,執(zhí)行Text t = new Text("init");
初始化成員變量j掏导,輸出9:j i=8 n=100
調(diào)用構(gòu)造塊和構(gòu)造方法,輸出 10:構(gòu)造塊 i=9 n=101
11:init i=10 n=102

涉及要點

1.類加載過程
加載某類前先加載其父類
加載某類時羽峰,先聲明靜態(tài)成員變量趟咆,初始化為默認值,再初始化靜態(tài)成員變量執(zhí)行靜態(tài)代碼塊
初始化靜態(tài)成員變量執(zhí)行靜態(tài)代碼塊時梅屉,是按順序執(zhí)行(初始化靜態(tài)成員變量的本質(zhì)就是靜態(tài)代碼塊)

2.實例化過程
對某類實例化前值纱,先對其父類進行實例化
實例化某類時,先聲明成員變量履植,初始化為默認值计雌,再初始化成員變量執(zhí)行代碼塊
初始化成員變量執(zhí)行代碼塊時,是按順序執(zhí)行

3.在某類加載過程中調(diào)用了本類實例化過程(如new了本類對象)玫霎,則會暫停類加載過程先執(zhí)行實例化過程凿滤,執(zhí)行完畢再回到類加載過程

類的主動使用與被動使用

主動使用例子:

1):最為常用的new一個類的實例對象
2):直接調(diào)用類的靜態(tài)方法。
3):操作該類或接口中聲明的非編譯期常量靜態(tài)字段
4):反射調(diào)用一個類的方法庶近。
5):初始化一個類的子類的時候翁脆,父類也相當于被程序主動調(diào)用了
(如果調(diào)用子類的靜態(tài)變量是從父類繼承過來并沒有復寫的,那么也就相當于只用到了父類的東東鼻种,和子類無關(guān)反番,
所以這個時候子類不需要進行類初始化)。
6):直接運行一個main函數(shù)入口的類。

所有的JVM實現(xiàn)罢缸,在首次主動使用某類的時候才會加載該類篙贸。

被動使用例子:

1):子類調(diào)用父類的靜態(tài)變量,子類不會被初始化枫疆。只有父類被初始化爵川。對于靜態(tài)字段,只有直接定義這個字段的類才會被初始化.
2):通過數(shù)組定義來引用類息楔,不會觸發(fā)類的初始化寝贡,如SubClass[] sca = new SubClass[10];
3):訪問類的編譯期常量,不會初始化類

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末值依,一起剝皮案震驚了整個濱河市圃泡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌愿险,老刑警劉巖颇蜡,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異拯啦,居然都是意外死亡澡匪,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門褒链,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人疑苔,你說我怎么就攤上這事甫匹。” “怎么了惦费?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵兵迅,是天一觀的道長。 經(jīng)常有香客問我薪贫,道長恍箭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任瞧省,我火速辦了婚禮扯夭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘鞍匾。我一直安慰自己交洗,他們只是感情好,可當我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布橡淑。 她就那樣靜靜地躺著构拳,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上置森,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天斗埂,我揣著相機與錄音,去河邊找鬼凫海。 笑死蜜笤,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的盐碱。 我是一名探鬼主播把兔,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼瓮顽!你這毒婦竟也來了县好?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤暖混,失蹤者是張志新(化名)和其女友劉穎缕贡,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拣播,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡晾咪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了贮配。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谍倦。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖泪勒,靈堂內(nèi)的尸體忽然破棺而出昼蛀,到底是詐尸還是另有隱情,我是刑警寧澤圆存,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布叼旋,位于F島的核電站,受9級特大地震影響沦辙,放射性物質(zhì)發(fā)生泄漏夫植。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一油讯、第九天 我趴在偏房一處隱蔽的房頂上張望详民。 院中可真熱鬧,春花似錦撞羽、人聲如沸阐斜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽谒出。三九已至隅俘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間笤喳,已是汗流浹背为居。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留杀狡,地道東北人蒙畴。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像呜象,于是被迫代替她去往敵國和親膳凝。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,033評論 2 355

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

  • 很長時間沒看這方面的內(nèi)容了恭陡,寫篇文章讓自己牢記一下蹬音,順便分享一下。 首先休玩,寫代碼以便檢驗結(jié)果著淆。測試代碼: 子類代碼...
    沈子羽閱讀 5,142評論 2 7
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法拴疤,內(nèi)部類的語法永部,繼承相關(guān)的語法,異常的語法呐矾,線程的語...
    子非魚_t_閱讀 31,639評論 18 399
  • Win7下如何打開DOS控制臺苔埋? a:開始--所有程序--附件--命令提示符 b:開始--搜索程序和文件--cmd...
    逍遙嘆6閱讀 1,599評論 4 12
  • 曾有一段時間,身心俱疲凫佛,充滿了煩惱讲坎,很想知道怎樣才能讓自己每天都開心快樂的生活。我偶然間拜讀了伯特蘭·亞瑟·威...
    星空道德閱讀 5,890評論 4 20
  • 2017年8月6日晚 今晚我買醉了愧薛,喝醉了我才知道自己永遠都忘不了你,七年衫画,我還那么貪念你的臂彎毫炉,我知道我對不起你...
    臻臻的心閱讀 179評論 0 0