1.classLoader的介绍及加载过程java
与普通程序不一样的是,Java程序(class文件)并非本地的可执行程序。当运行Java程序时,首先运行JVM(Java虚拟机),而后再把Java class加载到JVM里头运行,负责加载Java class的这部分就叫作Class Loader。因此classLoader的目的在于把class文件装入到jvm中。bootstrap
那么classLoader又在那里的啦?又由谁调用呢?其实classLoader只是jvm的一个实现的一部分。Jvm提供的一个顶级的classLoader(bootStrap classLoader),bootStrap classLoader负责加载java核心的API以知足java程序最基本的需求。Jvm还提供的两个classLoader,其中Extension ClassLoader负责加载扩展的Java class,Application ClassLoader负责加载应用程序自身的类。而Extension ClassLoader和Application ClassLoader则由bootStrap classLoader加载。jvm
2.classLoader加载的基本流程继承
当运行一个程序的时候,JVM启动,运行bootstrap classloader,该ClassLoader加载java核心API(ExtClassLoader和AppClassLoader也在此时被加载),而后调用ExtClassLoader加载扩展API,最后AppClassLoader加载CLASSPATH目录下定义的Class,这就是一个程序最基本的加载流程。ssl
3.classLoader加载的方式get
其实classLoader在加载class文件的时候就采用的双亲委托模式。每个自定义ClassLoader都必须继承ClassLoader这个抽象类,而每一个ClassLoader都会有一个parent ClassLoader,咱们能够看一下ClassLoader这个抽象类中有一个getParent()方法,这个方法用来返回当前ClassLoader的parent。虚拟机