类加载器基本概念
类加载器 (class loader) 用来加载 Java 类到 Java 虚拟机中. 一般来说, Java 虚拟机使用 Java 类的方式如下: Java 源程序 (.java 文件) 在经过 Java 编译器编译之后就被转换成 Java 字节代码(.class 文件).
类加载器负责读取 Java 字节代码, 并转换成 java.lang.Class 类的一个实例. 每个这样的实例用来表示一个 Java 类. 通过此实例的 newInstance()方法就可以创建出该类的一个对象. 实际的情况可能更加复杂, 比如 Java 字节代码可能是通过工具动态生成的, 也可能是通过网络下载的.
基本上所有的类加载器都是 java.lang.ClassLoader 类的一个实例.
类加载双亲委派机制
JVM 在加载类时默认采用的是双亲委派机制. 通俗的讲, 就是某个特定的类加载器在接到加载类的请求时, 首先将加载任务委托给父类加载器, 依次递归, 如果父类加载器可以完成类加载任务, 就成功返回; 只有父类加载器无法完成此加载任务时, 才自己去加载.
java.lang.ClassLoader 类
java.lang.ClassLoader 类的基本职责就是根据一个指定的类的名称, 找到或者生成其对应的字节代码, 然后从这些字节代码中定义出一个 Java 类, 即 java.lang.Class 类的一个实例. 除此之外, ClassLoader 还负责加载 Java 应用所需的资源, 如图像文件和配置文件等.
Java 中类加载器分类
Java 中的类加载器大致可以分成两类, 一类是系统提供的, 另外一类则是由 Java 应用开发人员编写的.
系统提供的类加载器主要有三个
引导类加载器(Bootstrap class loader): 它用来加载 Java 的核心库, 是用原生代码来实现的, 并不继承自 java.lang.ClassLoader.
扩展类加载器(extensions class loader): 它用来加载 Java 的扩展库. Java 虚拟机的实现会提供一个扩展库目录. 该类加载器在此目录里面查找并加载 Java 类.
系统类加载器 (system class loader): 它根据 Java 应用的类路径(CLASSPATH) 来加载 Java 类. 一般来说, Java 应用的类都是由它来完成加载的. 可以通过 ClassLoader.getSystemClassLoader()来获取它.
来源: http://www.bubuko.com/infodetail-3198283.html