如何理解Java JVM虛擬機(jī)中init和clinit的區(qū)別,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。
創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比濱海新區(qū)網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式濱海新區(qū)網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋濱海新區(qū)地區(qū)。費(fèi)用合理售后完善,十載實(shí)體公司更值得信賴。
public class Test1 {
static int x = 1;
public static void main(String[] args) throws Exception {
}
}
public class Test2 {
static final int x = 1;
public static void main(String[] args) throws Exception {
}
}
Test1類中有
public class Test{
static{
i=0;//給變量賦值可以正常編譯通過
System.out.print(i);//這句編譯器會提示"非法向前引用"
}
static int i=1;
}
虛擬機(jī)JVM會保證在子類的
static class Parent{
public static int A=1;
static{
A=2;
}
static class Sub extends Parent{
public static int B = A;
}
public static void main(String[] args){
System.out.println(Sub.B);
}
}
注意:接口中屬性都是static final類型的常量,在準(zhǔn)備階段就已經(jīng)初始化完成了。
接口中不能使用靜態(tài)語句塊,但仍然有變量初始化的賦值操作,因此接口與類一樣都會生成
JVM類加載原理
1)類的生命周期包括了:加載(Loading)、驗(yàn)證(Verification)、準(zhǔn)備(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)、卸載(Unloading)七個階段
2)當(dāng)Java程序需要使用某個類時(shí),JVM會確保這個類已經(jīng)被加載、連接(驗(yàn)證、準(zhǔn)備和解析)和初始化。
3)加載階段:通過一個類的全限定名來獲取此類的二進(jìn)制字節(jié)流;將這個字節(jié)流所代表的靜態(tài)存儲結(jié)構(gòu)轉(zhuǎn)化為方法區(qū)的運(yùn)行時(shí)數(shù)據(jù)結(jié)構(gòu);在java堆中生成一個代表這個類的Class對象,作為方法區(qū)這些數(shù)據(jù)的訪問入口;
4)驗(yàn)證階段:驗(yàn)證是為了確保Class文件的字節(jié)流中包含的信息符合當(dāng)前虛擬機(jī)的要求,并且不會危害虛擬機(jī)自身的安全;包括文件格式驗(yàn)證、元數(shù)據(jù)驗(yàn)證、字節(jié)碼驗(yàn)證、符號引用驗(yàn)證;如果驗(yàn)證到輸入的字節(jié)流不符合Class文件的存儲格式,就拋出一個java.lang.VerifyError異?;蚱渥宇惍惓!?/p>
5)準(zhǔn)備階段:準(zhǔn)備階段是正式為類變量分配內(nèi)存并設(shè)置類變量初始值(各數(shù)據(jù)類型的零值)的階段,這些內(nèi)存將在方法區(qū)中進(jìn)行分配。
6) 解析階段:解析階段是在虛擬機(jī)將常量池內(nèi)的符號引用替換為直接引用的過程。符號引用:符號引用以一組符號來描述所引用的目標(biāo),符號可以是任何形式的字面量,只要使用時(shí)能無歧義地定位到目標(biāo)即可。符號引用與虛擬機(jī)實(shí)現(xiàn)的內(nèi)存布局無關(guān),引用的目標(biāo)并不一定已經(jīng)加載到內(nèi)存中。直接引用:直接引用可以是直接指向目標(biāo)的指針、相對偏移量或者一個能間接定位到目標(biāo)的句柄。如果有了直接引用,那引用的目標(biāo)必定已經(jīng)在內(nèi)存中存在。
7)初始化階段:初始化階段是執(zhí)行類構(gòu)造器
初始化是重點(diǎn),需要清楚以下幾點(diǎn):
1)
2) 方法與實(shí)例構(gòu)造器
3)
4)執(zhí)行接口的
5)虛擬機(jī)會保證一個類的
看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)的支持。