類加載器加載,可以理解為,它從壹些資源裏解析類信息加載到虛擬機
最簡單的就是我們的代碼在jar包裏,jar裏的class文件是怎麽被讀到虛擬機裏並能產生類對象的,就是因為有類加載器找到了這個jar,並且解析讀取了jar,讀到裏面的class文件,進而加載至虛擬機
至於為什麽好幾層類加載器,我覺得是程序定義了不同層次的資源,比如首先得嘗試加載jdk本身的庫、jar,然後我們自己寫的代碼也被類加載器掃描解析加載
所以這裏面,至少就有2個層次,1個是像jdk這種,我們用jdk就會用它的庫,如果它自己沒有類加載器運行就會有問題,(類似的比如我們用某些框架,框架本身也可能會寫自己的類加載器並加載自己需要的資源),然後我們自己開發的代碼也是相當於jdk給預留了掃描的位置,我們在其中添加的class會被讀到(配置源代碼,配置library啥的),那麽如果我們添加到不是jdk能識別的位置,它肯定就加載不了了...需要我們手動加載
(很實際的例子,spring的bean不就是配了壹個bean的xml,掃描文件讀取解析嗎,如果放的不是xml是class文件呢對不對)
至於為什麽雙親委派,這個搜壹搜就會有答案了,防止出現相同的類的定義就可能導致無法確定類是哪個了...
比如手殘非要按jdk代碼壹樣寫個java.lang.Object...(寫不了的哈)
類加載器:?
所以先保證底層的類加載先加載完需要的類,加載不了的再交給子加載器,逐層嘗試加載完所需要的的資源