Java中的ClassLoader是一个类,用于加载Java中的类文件。
java.lang.ClassLoader是一个抽象类。
我的问题是这个java.lang.ClassLoader类是否与JVM的类加载器(1.引导类加载器 2.扩展类加载器 3.系统类加载器)有任何关系?
还是这个java.lang.ClassLoader是一个单独的类,可以用来创建自定义类加载器?
类加载器是Java运行时环境的一部分,它将Java类动态加载到Java虚拟机中。它负责定位库,读取其内容并加载库中包含的类。当JVM启动时,使用三个类加载器:
引导类加载器
扩展类加载器
系统类加载器
引导类加载器加载核心Java库。它是用本地代码编写的。引导类加载器负责将关键Java类(如java.lang.Object和其他运行时代码)加载到内存中。运行时类打包在jre/lib/rt.jar文件中。
扩展类加载器加载扩展目录中的代码。它由ExtClassLoader类实现。
系统类加载器加载在java.class.path上找到的代码,该路径映射到系统类路径变量。它由AppClassLoader类实现。默认情况下,所有用户类都由系统类加载器加载。
Java ClassLoader是分层的,每当提出加载类的请求时,它都将其委托给其父级,从而在运行时环境中保持唯一性。如果父类加载器找不到该类,则类加载器本身尝试加载该类。
这意味着首先System类加载器将请求委派给Extensions类加载器,后者将请求委派给Bootstrap类加载器,在此处搜索类,如果未找到,则Extensions类加载器将搜索类,如果未找到,则System类加载器将搜索类,如果未找到,则抛出ClassNotFoundException
JVM是否总是使用System类加载器来加载类?
请纠正我任何错误之处。