Java 的 ClassLoader
1. ClassLoader 的用途
a: 类加载器(class loader)是用来动态的加载 class 文件到虚拟机当中 , 并转换成 java.lang.Class 类的一个实例 , 每个这样的
实例用来表示一个 java 类 , 因此我们可以根据 Class 的实例可以得到该类的信息 , 并通过实例的 newInstance()方法就可以创
建出该类的一个对象 , 除此之外,ClassLoader 还负责加载 Java 应用所需的资源,如图像文件和配置文件等。为了完成加载
类的这个职责,ClassLoader 提供了一系列的方法 ;
b: 场景描述 , 大家都知道,当我们写好一个 Java 程序之后,不是管是 CS 还是 BS 应用,都是由若干个.class 文件组织而成的
一个完整的 Java 应用程序,当程序在运行时,即会调用该程序的一个入口函数来调用系统的相关功能,而这些功能都被封装
在不同的 class 文件当中,所以经常要从这个 class 文件中要调用另外一个 class 文件中的方法,如果另外一个文件不存在的,
则会引发系统异常。
c: 程序在启动的时候,并不会一次性加载程序所要用的所有 class 文件,而是根据程序的需要,通过 Java 的类加载机制
(ClassLoader)来动态加载某个 class 文件到内存当中的,从而只有 class 文件被载入到了内存之后,才能被其它 class 所引
用。
2.java 默认提供的 ClassLoad 和自定义 ClassLoad
2-1: BootStrap ClassLoader: 称为启动类加载器,是 Java 类加载层次中最顶层的类加载器,负责加载 JAVA_HOME/jre/lib 中
JDK 的核心类库,如:rt.jar、resources.jar、charsets.jar 等 , 以及将 -Xbootclasspath 选项指定
的 jar 包装入工作,Bootstrap ClassLoader 不继承自 ClassLoader,因为它不是一个普通的 Java
类,底层由 C++编写,已嵌入到了 JVM 内核当中,当 JVM 启动后,Bootstrap ClassLoader 也
随着启动,负责加载完核心类库后,并构造 Extension ClassLoader 和 App ClassLoader 类加载
器。
2-2:Extension ClassLoader:称为扩展类加载器,负责加载 Java 的扩展类库,默认加载 JAVA_HOME/jre/lib/ext/目下的所有
jar 文 件 , 以 及 将 -Djava.ext.dirs 指 定 目 录 下 的 jar 文 件 加 载 进 去 ( 该 类 继 承 了
java.lang.ClassLoader );
2-3:App ClassLoader: 称为系统类加载器,负责加载应用程序 classpath 目录下的所有 jar 文件和 class 文件 ,以及将-
Djava.class.path 所指的目录下的类与 jar 文件进行加载 , 一般来说,Java 应用的类都是由它来
完 成 加 载 的 , 可 以 通 过 ClassLoader.getSystemClassLoader() 来 获 取 它 ( 该 类 继 承 了
java.lang.ClassLoader );
评论1
最新资源