在java中可以有多个类加载器,默认有三个主要的类加载器,
BootStrap , ExtClassLoader , AppClassLoader
java中所有的类都由类加载器加载进内存,(回答类加载器有什么用)
类加载器本身也是java类,而类加载器是由BootStrp来加载
BootStrp不是java类,是一段二进制码,可以最顶层的类加载器。(回答什么是类加载器)
每个类加载器都管辖一个范围
BootStrap 只在 jre/lib/rt.jar中找需要加载的类
ExtClassLoader 只在 jre/lib/ext中找需要加载的类
BootStrap 只在 classpath指定的目录中找需要加载的类
说通俗点,就是一般我们自己写的普通类,都是在 classpath指定的目录中(classpath即.class文件所放的目录或jar),是用APPClassLoader类加载器加载的;而像java自带的类一般是由BootStrap加载的,例:System类是由BootStrap类加载器加载的。
ExtClassLoader类加载器一般加载的是扩展类。
而我们自定义的类加载器是加载我们自己指定目录里的类文件,可以用于加密解密我们自己想加密的.class 文件。
其实一般我们自己写的类都是在 classpath指定的目录中,用APPClassLoader类加载器加载就可以了(都是自动加载的)。类加载器的作用,加载.class文件。.class文件只有被类加载器加载了才能被执行,编译和执行是两个过程。
|