本文共 5943 字,大约阅读时间需要 19 分钟。
public abstract class MultiClassLoader extends ClassLoader{ ... public synchronized Class loadClass(String s, boolean flag) throws ClassNotFoundException { /* 检查类 s 是否已经在本地内存 */ Class class1 = (Class)classes.get(s); /* 类 s 已经在本地内存 */ if(class1 != null) return class1; try/* 用默认的 ClassLoader 装入类 */ { class1 = super.findSystemClass(s); return class1; } catch(ClassNotFoundException _ex) { System.out.println(">> Not a system class."); } /* 取得类 s 的字节数组 */ byte abyte0[] = loadClassBytes(s); if(abyte0 == null) throw new ClassNotFoundException(); /* 将类字节数组转换为类 */ class1 = defineClass(null, abyte0, 0, abyte0.length); if(class1 == null) throw new ClassFormatError(); if(flag) resolveClass(class1); /* 解析类 */ /* 将新加载的类放入本地内存 */ classes.put(s, class1); System.out.println(">> Returning newly loaded class."); /* 返回已装载、解析的类 */ return class1; } ... } |
图 1 Java 的类装载的体系结构 |
图 2 Java 类装载的代理结构 |