java 一个类由哪个类加载器加载 举例
时间: 2024-09-09 10:01:23 浏览: 44
举例讲解Java的内部类与类的加载器
在Java中,一个类是由ClassLoader加载的。ClassLoader是一个负责查找并加载类、资源和URL的系统组件。主要有三种类型的ClassLoader:
1. **Bootstrap ClassLoader**(启动类加载器):这是最顶层的类加载器,它负责加载JDK的核心API和其他一些核心库。例如,`java.lang.Object`这样的基础类就是由Bootstrap ClassLoader加载的。
2. **Extension ClassLoader**(扩展类加载器):它是Bootstrap ClassLoader的一个补充,负责加载JDK安装目录下的extension文件夹中的类库。
3. **AppClassLoader(应用类加载器)**:每个Java应用程序都有一个默认的AppClassLoader实例,也称为"系统类加载器",它负责加载用户的应用程序主类以及通过application.properties或MANIFEST.MF指定的类路径中的类。
当你在编写Java代码时,如果直接使用类名,比如`Class.forName("com.example.MyClass")`,那么默认会使用AppClassLoader来查找并加载这个类。如果你在特定上下文中,如Spring框架中,可能会有自定义的ClassLoaders参与到类的加载过程。
例子:
```java
// 使用Class.forName()加载类
Class<?> myClass = Class.forName("com.example.MyClass");
// 或者在Spring框架中,可能使用ApplicationContext来获取ClassLoader
ApplicationContext context = new ClassPathXmlApplicationContext("appContext.xml");
ClassLoader loader = context.getEnvironment().getClassLoader();
myClass = loader.loadClass("com.example.MyClass");
```
阅读全文