12、启动类加载器
12.1、启动类加载器介绍
内建于JVM中的启动类加载器会加载java.lang.ClassLoader以及其他的java平台类,当JVM启动时,一块特殊的机器码会运行,它会加载扩展类加载器与系统类加载器,这块特殊的机器码就叫做启动类加载器(Bootstrap)。
启动类加载器并不是java类,而其它的类加载器则都是java类。
启动类加载器是特定于平台的机器指令,它负责开启整个加载过程。
所有的类加载器(除了启动类加载器)都被实现为java类。不过,总归要有一个组件来加载第一个java类加载器,从而让整个加载过程能够顺利进行下去,加载第一个纯java类加载器就是启动类加载器的职责。
启动类加载器还会负责加载供jre正常运行所需要的基本组件,这包括java.util与java.lang包中的类等等。
12.2、sun.misc.Launcher类
系统类加载器和扩展类加载器是两个静态的内部类,定义在了Launcher类的内部。可以在“http://openjdk.java.net/”中查看Launcher类的源码。
package com.shtec.classLoader; import sun.misc.Launcher; public class Test09 { public static void main(String[] args) { //ClassLoader是由启动类加载器加载的 System.out.println(ClassLoader.class.getClassLoader());//null //Launcher内部定义了系统和扩展类加载器,为null,说明系统和扩展类加载器是由启动类加载器加载的 System.out.println(Launcher.class.getClassLoader());//null } }