Java虚拟机中可以安装多个类加载器,系统默认有三个主要的类加载器,每个类加载器负责加载特定位置的类:
BootStrap,ExtClassLoader,AppClassLoader。
类加载器也是Java类,因此Java类的类加载器本身也要被其他的类加载器加载,显然必须有第一个类加载器不是Java
类,它就是BootStrap类加载器。
代码示例:
package com.itheima.day02;
public class ClassLoaderTest {
public static void main(String[] args) {
System.out.println(ClassLoaderTest.class.getClassLoader().
getClass().getName());
System.out.println(System.class.getClassLoader());
}
}
由上面的示例可以看到ClassLoaderTest类是由AppClassLoader类加载器加载的。
System类是由BootStrap类加载器加载的。
注意:
JVM内核启动的时候,BootStrap就已经被加载了,它是内嵌在JVM内核中的,是用C++语言编写的二进制代
码,因此不需要其他类加载器加载。
Java虚拟机中的所有类装载器采用了具有父子关系的树形结构进行组织。
代码示例:
package com.itheima.day02;
public class ClassLoaderTest {
public static void main(String[] args) {
ClassLoader loader = ClassLoaderTest.class.getClassLoader();
while(loader !=null){
System.out.println(loader.getClass().getName());
loader = loader.getParent();
}
System.out.println(loader);
}
}
由上面的示例可以看到AppClassLoader类加载器的父级别类加载器是ExtClassLoader类加载器,
ExtClassLoader类加载器的父级别类加载器是BootStrap类加载器。
在实例化每个类加载器对象时,需要为其指定一个父级类加载器对象或者默认采用系统类加载器为其父级类加载。
|
|