Java ClassLoader
概述 不同 JVM 实现细节各异,下文只讨论 HotSpot 在 JDK 9 及以后(含当前 JDK 26)的行为。JDK 8 及更早的 ExtClassLoader、jre/lib/ext、sun.misc.Launcher 等表述见文末「JDK 8 及更早」。 本文从四方面展开:内置 ClassLoader 层次、双亲委托、自定义 ClassLoader、打破双亲委托的常见场景。类加载器「去哪里找类」由 classpath / module path 决定,概念见 Java Classpath 与 Module Path。 内置 ClassLoader 层次 JDK 运行时提供三个内置加载器(ClassLoader 官方文档): 加载器 获取方式 职责 Bootstrap Java 代码中为 null 加载 java.base 等核心模块;C++ 实现,不是 ClassLoader 子类 Platform(原 Extension) ClassLoader.getPlatformClassLoader() 加载 Java SE 平台 API 及其模块(非应用 classpath) System / Application ClassLoader.getSystemClassLoader() 加载应用 classpath、module path 上的类 父子关系: Bootstrap (null) └── PlatformClassLoader └── AppClassLoader (System ClassLoader) 实现类位于 jdk.internal.loader.ClassLoaders(PlatformClassLoader、AppClassLoader),均为内部 BuiltinClassLoader 体系。不要依赖具体类名写业务逻辑。 ...