當(dāng)Java程序執(zhí)行時(shí),類的字節(jié)碼文件被加載到內(nèi)存,如果該類沒(méi)有創(chuàng)建對(duì)象,類的實(shí)例成員變量不會(huì)被分配內(nèi)存。但是,類中的類變量,在該類被加載到內(nèi)存時(shí),就分配了相應(yīng)的內(nèi)存空間。
如果該類創(chuàng)建對(duì)象,那么不同對(duì)象的實(shí)例變量互不相同,即分配不同的內(nèi)存空間,而類變量不再重新分配內(nèi)存,所有的對(duì)象共享類變量,即所有的對(duì)象的類變量是相同的一處內(nèi)存空間,類變量的內(nèi)存空間直到程序退出運(yùn)行,才釋放所占有的內(nèi)存。

********************************************************************************************************************
當(dāng)類的字節(jié)碼文件被加載到內(nèi)存時(shí)。類的實(shí)例方法不會(huì)被分配入口地址,當(dāng)該類創(chuàng)建對(duì)象后,類中的實(shí)例方法才分配入口地址,從而實(shí)例方法可以被類創(chuàng)建的任何對(duì)象調(diào)用執(zhí)行。
需要注意的是,當(dāng)我們創(chuàng)建第一個(gè)對(duì)象時(shí),類中的實(shí)例方法就分配了入口地址,當(dāng)再創(chuàng)建對(duì)象時(shí),不再分配入口地址。
也就是說(shuō),方法的入口地址被所有的對(duì)象共享,當(dāng)所有的對(duì)象都不存在時(shí),方法的入口地址才被取消。
對(duì)于類中的類方法,在該類被加載到內(nèi)存時(shí),就分配了相應(yīng)的入口地址。從而類方法不僅可以被類創(chuàng)建的任何對(duì)象調(diào)用執(zhí)行,也可以直接通過(guò)類名調(diào)用。類方法的入口地址直到程序退出才被取消。
