所谓装载就是寻找一个类或是一个接口的二进制形式并用该二进制形式来构造表明这个类或是这个接口的class对象的过程。java
在Java中,类装载器把一个类装入Java虚拟机中,要通过三个步骤来完成:装载、连接和初始化,其中连接又能够分红校验、准备、解析。bootstrap
JVM中类的装载是由ClassLoader和它的子类来实现的,Java ClassLoader是一个重要的Java运行时系统组件。它负责在运行时查找和装入类文件的类。网络
一个Java应用程序使用两种类型的类装载器:根装载器(bootstrap)和用户定义的装载器(user-defined)。jvm
Java类装载器的体系结构以下所示:操作系统
Bootstrap(根装载器) | Extension (扩展装载器) | System | UserDefine1 / \ UserDefine2 UserDefine3 | UserDefine4
Java的类装载模型是一种代理(delegation)模型。当JVM 要求类装载器CL(ClassLoader)装载一个类时,CL首先将这个类装载请求转发给他的父装载器。代理
只有当父装载器没有装载并没有法装载这个类时,CL才得到装载这个类的机会。这样,全部类装载器的代理关系构成了一种树状的关系。树的根是类的根装载器(bootstrap ClassLoader) ,在JVM中它以"null"表示。code
除根装载器之外的类装载器有且仅有一个父装载器。在建立一个装载器时,若是没有显式地给出父装载器,那么JVM将默认系统装载器为其父装载器。对象
下面针对各类类装载器分别进行详细的说明:继承
根(Bootstrap)装载器:该装载器没有父装载器,它是JVM实现的一部分,从sun.boot.class.path装载运行时库的核心代码。接口
扩展(Extension)装载器:继承的父装载器为根装载器,不像根装载器可能与运行时的操做系统有关,这个类装载器是用纯Java代码实现的,它从java.ext.dirs (扩展目录)中装载代码。
系统(System or Application)装载器:装载器为扩展装载器,咱们都知道在安装JDK的时候要设置环境变量(CLASSPATH ),这个类装载器就是从java.class.path(CLASSPATH 环境变量)中装载代码的,它也是用纯Java代码实现的,同时仍是用户自定义类装载器的缺省父装载器。
小应用程序(Applet) 装载器: 装载器为系统装载器,它从用户指定的网络上的特定目录装载小应用程序代码。