什么加载了 Java 系统类加载器?

新手上路,请多包涵

我们知道我们可以覆盖系统 类加载器

 java -Djava.system.class.loader=com.test.MyClassLoader xxx

那么,既然 com.test.MyClassLoader 本身就是一个类,它是由谁加载的呢?

我们如何获得这个“元”类加载器的类文件?

原文由 James.Xu 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 401
2 个回答

来自 ClassLoader.getSystemClassLoader() 的 Javadoc

如果首次调用此方法时定义了系统属性“ java.system.class.loader ”,则该属性的值将作为将作为系统类加载器返回的类的名称。 该类使用默认的系统类加载器加载,并且必须定义一个公共构造函数,该构造函数采用用作委托父级的 ClassLoader 类型的单个参数。

默认系统类加载器本身特定于 JVM 实现。

原文由 casablanca 发布,翻译遵循 CC BY-SA 4.0 许可协议

Bootstrap 类加载器 是所有 类加载 器的父级,并加载 JRE 的 lib 目录中的标准 JDK 类(rt.jar 和 i18n.jar)。所有 java.* 类都由这个 _类加载器加载_。

扩展类加载器 是引导类加载器的直接子类。该类加载器在 JRE 的 lib\ext 目录中加载类。

System-Classpath 类加载器 是 Extensions 类加载器的直接子类。它加载由 CLASSPATH 环境变量指定的类和 jar

您可以尝试通过 java.system.class.loader 属性注入自定义类加载器(参见 ClassLoader#getSystemClassLoader )。

默认系统类加载器 是 MyClassLoader 实例的父级。

原文由 amicngh 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题