1譬重、加載
構(gòu)建類的字節(jié)碼對象,類型為Class類型簿训。將class字節(jié)碼文件加載到內(nèi)存中咱娶,并將這些數(shù)據(jù)轉(zhuǎn)換成方法區(qū)中的運行時數(shù)據(jù)(靜態(tài)變量米间、靜態(tài)代碼塊、常量池等)膘侮,在堆中生成一個class對象代表這個類屈糊,作為方法區(qū)類數(shù)的訪問入口。
2琼了、連接
將Java類的二進(jìn)制代碼合并到JVM的運行狀態(tài)之中逻锐。
2.1 驗證
檢查類加載信息是否符合JVM規(guī)范,無安全方面的問題雕薪。
檢查文件格式昧诱、元數(shù)據(jù)、字節(jié)碼所袁、符號引用驗證盏档。
2.2 準(zhǔn)備
可能會初始化類中的靜態(tài)變量(類變量),也可能會執(zhí)行類中的靜態(tài)代碼塊(具體是否執(zhí)行由加載方式?jīng)Q定)燥爷。
為類的靜態(tài)變量分配內(nèi)存蜈亩,并將其初始化默認(rèn)值。
2.3 解析
虛擬機(jī)常量池內(nèi)的符號引用替換為直接引用的過程前翎。
3稚配、初始化
執(zhí)行類構(gòu)造器的<clinit>()方法。(由類加載器負(fù)責(zé)將類加載到內(nèi)存中)港华。
為類的靜態(tài)變量賦予正確的初始值道川。
Java程序初始化順序:
1、父類的靜態(tài)變量
2立宜、父類的靜態(tài)代碼塊
3愤惰、子類的靜態(tài)變量
4、子類的靜態(tài)代碼塊
5赘理、父類的非靜態(tài)變量
6、父類的非靜態(tài)代碼塊
7扇单、父類的構(gòu)造方法
8商模、子類的非靜態(tài)變量
9、子類的非靜態(tài)代碼塊
10蜘澜、子類的構(gòu)造方法
詳細(xì)類加載代理模式(雙親委派機(jī)制模型)參考:http://www.reibang.com/p/dd39654231e0