Java類的加載過程包括以下步驟:
加載(Loading):將類的字節(jié)碼文件加載到內(nèi)存中。這個(gè)階段由類加載器完成,類加載器將字節(jié)碼文件從磁盤或網(wǎng)絡(luò)讀取到內(nèi)存,并創(chuàng)建一個(gè)對(duì)應(yīng)的Class對(duì)象。
驗(yàn)證(Verification):驗(yàn)證字節(jié)碼文件的合法性。這個(gè)階段確保字節(jié)碼文件符合Java虛擬機(jī)的要求,并且不會(huì)危害到虛擬機(jī)自身的安全。
準(zhǔn)備(Preparation):為類的靜態(tài)變量分配內(nèi)存空間并初始化默認(rèn)值。在這個(gè)階段,虛擬機(jī)為類的靜態(tài)變量分配內(nèi)存,并設(shè)置默認(rèn)初始值。
解析(Resolution):將符號(hào)引用轉(zhuǎn)換為直接引用。在Java程序中使用到的類、方法和字段都是通過符號(hào)引用來(lái)表示的,解析階段將這些符號(hào)引用轉(zhuǎn)換為對(duì)應(yīng)的直接引用,使得程序可以直接訪問這些類、方法和字段。
初始化(Initialization):執(zhí)行類的初始化代碼。在這個(gè)階段,虛擬機(jī)會(huì)執(zhí)行類的靜態(tài)初始化語(yǔ)句,包括執(zhí)行靜態(tài)變量的賦值語(yǔ)句和靜態(tài)代碼塊。
使用(Using):使用加載的類。在類加載完成后,就可以通過創(chuàng)建實(shí)例、調(diào)用方法或訪問字段來(lái)使用這個(gè)類。
卸載(Unloading):卸載不再使用的類。當(dāng)類不再被引用,且沒有活動(dòng)的實(shí)例時(shí),虛擬機(jī)可以卸載這個(gè)類,釋放內(nèi)存空間。
需要注意的是,Java類的加載過程是按需進(jìn)行的,即在需要使用某個(gè)類時(shí)才會(huì)加載它。