java類裝載分為兩種方式:
(1)預(yù)先加載
(2)按需加載
由于可對(duì)類進(jìn)行預(yù)先加載,所以在程序啟動(dòng)時(shí),不需要將所有的類都加載到JVM中,只有需要時(shí)才會(huì)加載,即大部分類被延遲到要使用時(shí)才加載,這成為java運(yùn)行時(shí)的動(dòng)態(tài)加載機(jī)制。
Java基礎(chǔ)類是程序運(yùn)行的基礎(chǔ),采用的是預(yù)先加載的方式。
那么按需加載,具體是什么樣的條件才會(huì)去加載呢?
答:當(dāng)這個(gè)類的靜態(tài)成員被第一次引用時(shí),就會(huì)觸發(fā)按需加載。這個(gè)靜態(tài)成員包括:靜態(tài)方法,靜態(tài)屬性,構(gòu)造方法。
PS1:當(dāng)訪問常量靜態(tài)常量屬性時(shí),JVM加載類的過程不會(huì)進(jìn)行初始化的工作
PS2:盡管構(gòu)造方法沒有顯示聲明為靜態(tài)方法,但是仍被作為類的靜態(tài)成員特例,因此,使用new來構(gòu)造一個(gè)對(duì)象時(shí),JVM還是會(huì)加載這個(gè)類。
例子說明:
代碼如圖1,運(yùn)行結(jié)果如圖2

圖1

圖2
當(dāng)調(diào)用Test1的靜態(tài)常量屬性時(shí),并沒有執(zhí)行Test1的靜態(tài)域代碼,只有在new Test1時(shí),才進(jìn)行了初始化工作