当需要jvm需要或者预加载一个类的时候,会检测此类是否已经加载过。如果没有加载过,加载此类。
类的加载过程,包括:加载,链接,初始化。
加载是通过类加载器完成的。类加载器主要包括,根类加载器,扩展类加载器,系统类加载器 。也可
以自己通过继承ClassLoader基类来创建自己的类加载器。
加载机制采用双亲委派机制。双亲委派机制可以理解为,当类加载器加载一个类时,查询.class 文件
位置会递归交给其父 加载器来完成。类加载器与父 加载器不存在继承关系,是定义好的加载顺序。
代码如下:
private final ClassLoader parent;
public Enumeration<URL> getResources(String name) throws IOException {
@SuppressWarnings("unchecked")
Enumeration<URL>[] tmp = (Enumeration<URL>[]) new Enumeration<?>[2];
if (parent != null) {
tmp[0] = parent.getResources(name);
} else {
tmp[0] = getBootstrapResources(name);
}
tmp[1] = findResources(name);
return new CompoundEnumeration<>(tmp);
}