十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
這篇文章主要講解了“Java類的加載過程是怎樣的”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Java類的加載過程是怎樣的”吧!

成都創(chuàng)新互聯(lián)公司主營李滄網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,App定制開發(fā),李滄h5成都小程序開發(fā)搭建,李滄網(wǎng)站營銷推廣歡迎李滄等地區(qū)企業(yè)咨詢
一、加載
在加載階段,虛擬機(jī)主要完成三件事:
1.通過一個(gè)類的全限定名來獲取定義此類的二進(jìn)制字節(jié)流。
2.將這個(gè)字節(jié)流所代表的靜態(tài)存儲(chǔ)結(jié)構(gòu)轉(zhuǎn)化為方法區(qū)域的運(yùn)行時(shí)數(shù)據(jù)結(jié)構(gòu)。
3.在Java堆中生成一個(gè)代表這個(gè)類的java.lang.Class對(duì)象,作為方法區(qū)域數(shù)據(jù)的訪問入口
二、驗(yàn)證
驗(yàn)證階段作用是保證Class文件的字節(jié)流包含的信息符合JVM規(guī)范,不會(huì)給JVM造成危害。如果驗(yàn)證失敗,就會(huì)拋出一個(gè)java.lang.VerifyError異常或其子類異常。驗(yàn)證過程分為四個(gè)階段
1.文件格式驗(yàn)證:驗(yàn)證字節(jié)流文件是否符合Class文件格式的規(guī)范,并且能被當(dāng)前虛擬機(jī)正確的處理。
2.元數(shù)據(jù)驗(yàn)證:是對(duì)字節(jié)碼描述的信息進(jìn)行語義分析,以保證其描述的信息符合Java語言的規(guī)范。
3.字節(jié)碼驗(yàn)證:主要是進(jìn)行數(shù)據(jù)流和控制流的分析,保證被校驗(yàn)類的方法在運(yùn)行時(shí)不會(huì)危害虛擬機(jī)。
4.符號(hào)引用驗(yàn)證:符號(hào)引用驗(yàn)證發(fā)生在虛擬機(jī)將符號(hào)引用轉(zhuǎn)化為直接引用的時(shí)候,這個(gè)轉(zhuǎn)化動(dòng)作將在解析階段中發(fā)生。
三、準(zhǔn)備
準(zhǔn)備階段為變量分配內(nèi)存并設(shè)置類變量的初始化。在這個(gè)階段分配的僅為類的變量(static修飾的變量),而不包括類的實(shí)例變量。對(duì)已非final的變量,JVM會(huì)將其設(shè)置成“零值”,而不是其賦值語句的值:
pirvate static int size = 12;
那么在這個(gè)階段,size的值為0,而不是12。 final修飾的類變量將會(huì)賦值成真實(shí)的值。
四、解析
解析過程是將常量池內(nèi)的符號(hào)引用替換成直接引用。主要包括四種類型引用的解析。類或接口的解析、字段解析、方法解析、接口方法解析。
五、初始化
在準(zhǔn)備階段,類變量已經(jīng)經(jīng)過一次初始化了,在這個(gè)階段,則是根據(jù)程序員通過程序制定的計(jì)劃去初始化類的變量和其他資源。這些資源有static{}塊,構(gòu)造函數(shù),父類的初始化等。
至于使用和卸載階段階段,這里不再過多說明,使用過程就是根據(jù)程序定義的行為執(zhí)行,卸載由GC完成。
感謝各位的閱讀,以上就是“Java類的加載過程是怎樣的”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)Java類的加載過程是怎樣的這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!