文章字数:265,阅读全文大约需要1分钟
loadClass
加载一个类,传入名字或位置
- 调用
findLoadedClass(String)
检测是否这个类已经被加载 - 没有被加载则调用父类的
loadClass()
方法,直到找到或者父类为空(说明是启动类加载器) - 到了启动类加载器都没有就调用
findClass(String)
1 | protected Class<?> loadClass(String name, boolean resolve) |
findClass
- 根据名称或位置加载.class字节码,然后使用defineClass
- 通常由子类去实现
loadClass
的源码可以看到,最后如果还是找不到类就会调用findClass
。但是ClassLoader
的findClass
是直接抛出异常,自定义类加载器需要实现此方法。1
2
3protected Class<?> findClass(String name) throws ClassNotFoundException {
throw new ClassNotFoundException(name);
}
definclass
- 把字节码转化为Class