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