博爲峯Java技術題 ——JavaSE 類加載器Ⅰ

[類加載器簡介]java

博爲峯小博老師:線程

類加載器負責將.class文件加載到內存中,併爲之生成相應的java.lang.Class對象。code

當JVM啓動時,會造成由三個類加載器(BootStrap、ExtClassLoader、AppClassLoader)組成的初始類加載器層次結構,以下圖:對象

其中,BootStrap由JVM加載,ExtClassLoader和AppClassLoader由BootStrap加載。繼承

例子:用程序去證實上圖中對應的類加載器的父子關係(非繼承中的父子關係)內存

問題:當程序中用到一個類時,使用哪一個類加載器加載該類?get

當前線程的類加載器( Thread.getContextClassLoader() )去加載線程中的第一個類。虛擬機

若是類A中引用了類B,Java虛擬機將使用加載類A的類加載器來加載類B(全盤負責)。io

還能夠直接調用ClassLoader.loadClass()方法來指定某個類加載器去加載某個類。class

注意:每一個類加載器加載類時,先委託給其上級類加載器(父類委託)。

當全部祖宗類加載器沒有加載到類,回到發起者類加載器,還加載不了,則拋ClassNotFoundException。(不去找發起者的子加載器,由於ClassLoader沒有getChild方法)

相關文章
相關標籤/搜索