1.ClassLoader Java中類加載出現在哪個階段,編譯期和運行期? 類加載和類裝載是一樣的嗎?
:當然是運行期間啊,我自己有個理解誤區,改正后如下:編譯期間編譯器是不去加載類的,只負責編譯而已,去rt.jar拿數據干嘛,不依然是class文件,jvm是只要是class文件就能運行。
2.類加載ClassLoader,各個類加載器執行順序是什么?
:永遠是自己寫的加載器先去加載,記住並不是真正的加載,而是雙親委派機制,每個加載器都不真正去加載,而是去讓父加載器去加載,想一下,自然界亦是如此,如果父親有這個東西了,我還去白白辛苦一趟加載干嘛?
即,xxx.class文件,自己編寫的CustomClassLoader不去加載,我先去看看我的父類加載器是否已經加載這個class了->APPClassLoader,我依然不去加載,我再問問我的父類是否已經加載這個class文件了。
就這樣,不斷向上推,如果最后的BootStrapClassLoader依然沒有加載過這個class文件,並且嘗試去加載,結果沒找到,就會再U型轉回來,想攔截器一樣又轉回來,由底層加載器不斷的向下去委派加載。
說白了,真正干活最多的是bootStarpClassLoader,其他的類加載器只有在父類繞了一圈都沒找到情況下才去加載。即沒法依靠老子,只能靠自己了