Java反射机制:类加载器与反射操作详解
1. 类加载器概述
在Java运行时,每个类型都是由类加载器加载的,类加载器由 java.lang.ClassLoader
类的实例表示。可以使用 Class
类的 getClassLoader()
方法获取类型的类加载器引用。示例代码如下:
Class<Bulb> cls = Bulb.class;
ClassLoader loader = cls.getClassLoader();
Java运行时使用三个内置类加载器来加载类,它们分别是引导类加载器、平台类加载器和应用程序类加载器,它们的委托方向如图所示:
graph LR
A[引导类加载器] --> B[平台类加载器]
B --> C[应用程序类加载器]
这三个类加载器从不同位置加载不同类型的类,也可以添加自定义类加载器,自定义类加载器是 ClassLoader
类的子类。使用自定义类加载器可以从自定义位置加载类、划分用户代码和卸载类。不过,对于大多数应用程序来说,内置类加载器就足够了。
需要注意的是,从JDK 9开始,应用程序类加载器可以委托给平台类加载器和引导类加载器,平台类加载器也可以委托给应用程序类加载器。