ClassLoader基本概念
JVM在运行时会产生三个ClassLoader,Bootstrap ClassLoader、Extension ClassLoader和AppClassLoader.AppClassLoader的Parent是ExtClassLoader,而ExtClassLoader的Parent为Bootstrap ClassLoader。
Bootstrap是用C++编写的,我们在Java中看不到它,是null。它用来加载核心类库
Extension ClassLoader用来加载扩展类,即%/lib/ext中的类。
最后AppClassLoader才是加载Classpath的。
Java提供了抽象类ClassLoader,所有用户自定义类装载器都实例化自ClassLoader的子类。 System Class Loader是一个特殊的用户自定义类装载器,由JVM的实现者提供,在编程者不特别指定装载器的情况下默认装载用户类。系统类装载器可以通过ClassLoader.getSystemClassLoader() 方法得到。
简单点讲:
bootstrap Class Loaders负责装载java.*下的基本类
extension Class Loaders负责装载javax.*下的类
system Class Loaders负责系统(用户)实现的类
三者的关系是 bootstrap class loaders是extension class loaders的父亲 extension class loaders是system class loaders的父亲 class loader的装载机制是parent delegate的模型。即 类的装载是委托给父class loader去查找,如果没有找到才用当前的class loader来查找。
2、findClass(String name) 调用当前某个类
findClass 被loadClass方法调用 也可以直接调用某个类
3、defineClass(String name,byte[] b,int off,int len)
将某个类的字节码文件 读入到一个字节数组中 (楼上正解)但是还是建议你在看看手册中的具体用法 很详细
小结下:这几个类大多用在 实现类的加载 只是相对加载的方式有所区别罢了 理解上应该不困难 以上如果还有什么不明白 您可以继续问
帮你找了下相关的资料 这个我以前看到过
http://blog.csdn.net/fenglibing/article/details/17471659 文章题目是 实现自己的类加载时,重写方法loadClass与findClass的区别(我以前看过 推荐给你 希望对你有帮助 附图 你看看加深印象)
|