ClassLoader 源码初探
类加载器用于加载 Java 类到虚拟机中,其实现类 java.lang.ClassLoader
是一个抽象类,其职责是通过指定类的完全限定名 ( binary name
),找到或生成这个类对应的字节码,这些字节码中包含类的定义数据,通过字节码就可以构造出一个 java.lang.Class
对象。
每个 Class 对象都包含一个定义它的类加载器的引用,而数组的 Class 对象不是用类加载器创建的,而是在 Java 运行时根据需要自动创建的,如果调用数组的 Class 对象的 getClassLoader()
方法返回的类加载器与其元素类型的类加载器相同,如果数组元素是基本数据类,则没有类加载,返回空。比如:
// C为自定义类
C[] cs = new C[2];
// jdk.internal.loader.ClassLoaders$AppClassLoader@3d4eac69
System.out.println(cs.getClass().getClassLoader());
int[] is = new int[2];
// null
System.out.println(is.getClass().getClassLoader());