Java关于类加载器的简单学习
程序员文章站
2022-05-12 11:43:50
...
首先,类加载器本身也是一个类,类名就叫ClassLoader.
类加载器一共有三个子类,都属于负责加载类的对象。
1. AppClassLoader : 应用类加载器,作用是加载用户自定义类
2.ExtClassLoader : 扩展类加载器,作用是加载类库中的一些展类
3.BootStrapLoader : 引导类加载器,作用是加载 jdk提供的类.
下面还是要看一下代码:
package cn.itcast_类加载器;
public class Demo {
public static void main(String[] args) {
String s = "abc";
ClassLoader c1 = Demo.class.getClassLoader();
System.out.println(c1);//AppClassLoader
System.out.println(c1.getParent());//ExtClassLoader
System.out.println(c1.getParent().getParent());//BootStrapLoaderLoader
System.out.println(String.class.getClassLoader());//BootStrapLoader
}
}
上面代码的运行结果为:
此图包含了代码中四条输出语句的结果,第一、二行分别是AppClassLoader和ExtClassLoader的名字(虽然看起来像地址,但它们确实是名字),第三行和第四行输出为null,也就是说BootStrapLoader是无法获取的,因为BootStrapLoader这个类不是用Java语言编写的,而是用C/C++编写来的,所以BootStrapLoader的值为null,并不代表没有这个值,而是无法获取到这个值。因为String类型的类加载器是在JDK中的,所以获取的类加载器也为BootStrapLoader.
熟悉类加载器之前要了解一下反射机制,大家可以参考一下我之前写的《对Java中反射机制的理解》。