java類裝載分為兩種方式:
(1)預(yù)先加載
(2)按需加載
由于可對類進(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è)對象時(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)行了初始化工作