博为峰Java技术题 ——JavaSE 类加载器Ⅰ

[类加载器简介]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方法)

相关文章
相关标签/搜索