[类加载器简介]java
博为峰小博老师:线程
类加载器负责将.class文件加载到内存中,并为之生成相应的java.lang.Class对象。code
当JVM启动时,会造成由三个类加载器(BootStrap、ExtClassLoader、AppClassLoader)组成的初始类加载器层次结构,以下图:对象
其中,BootStrap由JVM加载,ExtClassLoader和AppClassLoader由BootStrap加载。继承
例子:用程序去证实上图中对应的类加载器的父子关系(非继承中的父子关系)内存
问题:当程序中用到一个类时,使用哪一个类加载器加载该类?get
当前线程的类加载器( Thread.getContextClassLoader() )去加载线程中的第一个类。虚拟机
若是类A中引用了类B,Java虚拟机将使用加载类A的类加载器来加载类B(全盘负责)。io
还能够直接调用ClassLoader.loadClass()方法来指定某个类加载器去加载某个类。class
注意:每一个类加载器加载类时,先委托给其上级类加载器(父类委托)。
当全部祖宗类加载器没有加载到类,回到发起者类加载器,还加载不了,则抛ClassNotFoundException。(不去找发起者的子加载器,由于ClassLoader没有getChild方法)