1 、什么是類加載
我們所開發(fā)的程序是如何被加載至jvm中運行的,將我們開發(fā)的java項目打包成jar包或者war包,實際是將.java文件編譯成為.class字節(jié)碼文件,然后通過類加載器加載至jvm中運行,供后續(xù)代碼運行使用。
?如下圖:

2 、類加載的過程
我們的代碼經(jīng)歷了 以下五個階段
加載 —>驗證?—>準(zhǔn)備?—>解析?—>初始化
加載階段:當(dāng)我們在代碼中使用到的類就會進(jìn)行加載,也就是hello.class調(diào)用user.class的時候,就會將字節(jié)碼文件加載至jvm內(nèi)存中。

驗證階段:進(jìn)行驗證我們開發(fā)的代碼編譯后的.class文件是否合法是否符合JVM規(guī)范,驗證通過后才能交給JVM來運行

準(zhǔn)備階段:當(dāng)字節(jié)碼文件驗證通過后,就會進(jìn)行準(zhǔn)備工作,給這個類? ? (user、hello)分配一定的內(nèi)存空間,然后會給類中的變量分配內(nèi)存空間,在給變量賦予初始值。

解析階段:解析是將符號引用替換為直接引用,主要針對類或接口、對象、字段、方法進(jìn)行解析。

初始化階段:也是核心階段, 執(zhí)行準(zhǔn)備階段的任務(wù),會給類變量開辟內(nèi)存空間和設(shè)置初始值,這段賦值代碼就是在初始化階段來執(zhí)行的。在實例化對象就會觸發(fā)(實例化對象時候 會觸發(fā)初始化 先初始化父類)。
