You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取ClassLoaders?下述类对应的ClassLoaders分别是什么?

Java ClassLoader相关问题解答

一、获取ClassLoader的常见方式

  • 从类实例获取:调用实例的getClass().getClassLoader(),得到加载该实例对应类的类加载器
  • 直接从Class对象获取:类名.class.getClassLoader(),注意部分核心类会返回null
  • 获取线程上下文类加载器:Thread.currentThread().getContextClassLoader(),该加载器可由线程自定义设置,常用于框架类加载场景
  • 获取系统类加载器:ClassLoader.getSystemClassLoader(),是默认加载应用classpath下自定义类的加载器

二、指定类对应的ClassLoader说明

首先明确一个前置规则:JDK核心类库默认由启动类加载器(Bootstrap ClassLoader)加载,该加载器由JVM底层用C/C++实现,不属于Java类本身,因此Java代码中获取该加载器对应类的ClassLoader时,返回值为null,你提到的三个类对应的情况如下:

  • ArrayList<Long>:ArrayList属于java.util包下的JDK内置核心类,泛型会在编译阶段进行类型擦除,实际对应Class为ArrayList.class,由启动类加载器加载,代码中调用ArrayList.class.getClassLoader()返回null
  • Map<Integer, Map<Integer, Map<Integer, Integer>>>:Map属于java.util包下的内置核心接口,泛型擦除后对应Class为Map.class,同样由启动类加载器加载,获取ClassLoader返回null
  • int[]:基础类型数组的类加载器与元素类型的类加载器保持一致,int为JDK内置基础类型,因此int数组类也由启动类加载器加载,调用int[].class.getClassLoader()返回null

内容的提问来源于stack exchange,提问作者Steve

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 11:45:05