在Java中類是有生命周期的,那么一個(gè)類的生命周期什么樣,有多久?接下來小編就與大家共同了解一下類的生命周期。Java源文件編譯成的class字節(jié)碼文件,在Java虛擬機(jī)中運(yùn)行,Java類的生命周期就是指一個(gè)class文件從加載到卸載的全過程。
1.加載:找到需要加載的類并把類的信息加載到j(luò)vm的方法區(qū)中,然后在堆區(qū)中實(shí)例化一個(gè)Java.lang.Class對(duì)象,作為方法區(qū)中這個(gè)類的信息的入口。Ps:日常我們說的類加載——指的是類的生命周期中加載、連接、初始化三個(gè)階段。
2.連接:連接階段比較復(fù)雜,一般會(huì)跟加載階段和初始化階段交叉進(jìn)行,這個(gè)階段的主要任務(wù)就是做一些加載后的驗(yàn)證工作以及一些初始化前的準(zhǔn)備工作。
3.類的初始化:按照順序自上而下運(yùn)行類的變量賦值語句和靜態(tài)語句。而沒有static修飾的賦值語句和執(zhí)行語句在實(shí)例化對(duì)象的時(shí)候才會(huì)運(yùn)行。
所以,Java的靜態(tài)變量也叫做類變量,它開始于類的創(chuàng)建,結(jié)束于類的消亡。非靜態(tài)變量叫做實(shí)例變量,它開始于類的實(shí)例的創(chuàng)建,結(jié)束語類的實(shí)例的消亡。
4.使用:當(dāng)初始化完成之后,Java虛擬機(jī)就可以執(zhí)行Class的業(yè)務(wù)邏輯指令,通過堆中Java.lang.Class對(duì)象的入口地址,調(diào)用方法區(qū)的方法邏輯,最后將方法的運(yùn)算結(jié)果通過方法返回地址存放到方法區(qū)或堆中。
類的使用包括主動(dòng)引用和被動(dòng)引用。主動(dòng)引用會(huì)引起類的初始化eg:通過new關(guān)鍵字實(shí)例化對(duì)象、讀取或設(shè)置類的靜態(tài)變量。被動(dòng)引用不會(huì)引起類的初始化eg:定義類數(shù)組、引用類的常量。
5.卸載:當(dāng)對(duì)象不再被使用時(shí),Java虛擬機(jī)的垃圾收集器將會(huì)回收堆中的對(duì)象,方法區(qū)中不再被使用的Class也要被卸載,否則方法區(qū)(Sun HotSpot永久代)會(huì)內(nèi)存溢出。類的卸載過程其實(shí)就是在方法區(qū)中清空類信息。
更多資訊盡在動(dòng)力節(jié)點(diǎn)官方網(wǎng)站,關(guān)注《動(dòng)力節(jié)點(diǎn)Java學(xué)院》微信平臺(tái),獲取全新Java知識(shí)