面试中经常会问到的关于,Java类的加载器有哪些的 ?什么是双亲委派机制、为什么要有双亲委派机制,如何打破它的?要想真的搞清楚这些。
类加载器
类加载的过程如下:类加载器就是将Java的字节码文件加载为java.lang.Class实列的文件,其过程如下的
类加载器的特点如下所示:
- 动态加载,无需在程序一开始运行的时候加载,而是在程序运行的过程中,动态按需加载,字节码的来源也很多,压缩包jar、war中,网络中,本地文件等。类加载器动态加载的特点为热部署,热加载做了有力支持。
- 全盘负责,当一个类加载器加载一个类时,这个类所依赖的、引用的其他所有类都由这个类加载器加载,除非在程序中显式地指定另外一个类加载器加载。所以破坏双亲委派不能破坏扩展类加载器以上的顺序。
类加载器分为:
双亲委派机制
什么是双亲委派机制的?
当某个特定的类加载器在接收到需要加载类的请求的时候,这个类会首先查看自己已经加载完成的类中是否包含这个类,如果有就返回, 没有的话就把加载的任务交给父类的加载器加载,以此来进行递归,父类的加载器若可以完成类的加载,就直接的返回它,若父类无法完成的话此加载任务的话,才会不得已自己去加载。这种机制称为双亲委派机制。
查看类加载器的路径
public static void main(String[] args) {
ClassLoader parent = ClassLoader.getSystemClassLoader().getParent();
URLClassLoader urlClassLoader= (