背景
Java源代碼被編譯器編譯成.class的位元組碼檔案,然後由ClassLoader負責将這些class檔案給加載到JVM中去生成對應Class對象
ClassLoader分為4層:
BootstrapClassLoader(啟動類加載器):核心類,java.lang.*
ExtClassLoader(标準擴充類加載器):jre等擴充類
AppClassLoader(系統類加載器):應用程式的主函數類
CustomClassLoader(使用者自定義類加載器):可加載指定路徑的類
加載過程
每次加載類時,先從最底層開始,檢查該類是否加載過,如果沒加載過并且存在父加載器,并在父加載器中執行這個過程,直到不存在父加載器。然後從最頂層開始嘗試加載,如果無法加載,則交給下一層加載。如果最底層也無法加載,就抛出異常
作用
1、避免類重複加載
2、保證安全,如果想要篡改一個核心類,但由于核心類會先由頂層ClassLoader加載,其他加載器會檢測到這個類已經被加載過,就不會重複加載