类加载器:加载类的类
内置类加载器:
1)引导类加载器 (Bootstrap Loader)
其实现依赖于底层操作系统,由C编写而成,没有继承于ClassLoader类。
引导类加载器从系统属性sun.boot.class.path所指定的目录中加载类库。默认为jre目录下的lib目录下的.class文件
该加载器没有父加载器。负责加载JVM的核心类库,如Object类就是由引导类加载的。
2)扩展类加载器 (Extended Loader)
它的父加载器为引导类加载器。由Java编写而成,是ClassLoader的子类。
它从java.ext.dirs中加载类库,或者从JDK安装目录jrelibext子目录下加载类库。
如果把用户创建的jar文件放在该目录下,也会自动由扩展类加载器加载 。
3)应用程序类加载器 (AppClass Loader)
父加载器为扩展类加载器。由Java编写而成,是ClassLoader的子类
它从环境变量classpath或者系统属性java.class.path所指定的目录中加载类,是用户自定义的类加载器的默认父加载器。
自定义类加载器:从指定路径加载类
自定义类加载器是URLClassLoader的类的对象 其父加载器为应用程序类加载器
URL url=new URL("file:/c:"); //类的URL路径 按照指定的格式
URLClassLoader loader=new URLClassLoader( new URL[]{url} );//获得具体类加载器
Class clazz=loader.loadClass(类的完整名字); //加载对应的类 返回对应的class对象
------------------------------------------------------------------
加载一个类时 类加载器的加载执行顺序如下图: