类加载的过程:
加载 -> 连接(验证、准备、解析) -> 初始化
- 验证:1.文件格式 2.元数据 3.字节码 4.符号引用
- 准备:为类变量分配内存并设置初始化值
- 解析:虚拟机将常量池内的符号引用替换为直接引用
类加载器:
从java虚拟机的角度来讲,只存在两种类加载器:
1.启动类加载器,C++语言实现,属于虚拟机自身
2.其他类加载器,java语言实现,独立于虚拟机外部
类加载器的种类:
1.启动类加载器 2.扩展类加载器 3.应用程序类加载器(系统类加载器)
三种加载器虽称为父子类关系,一般不会以继承关系来实现,而是都使用组合关系来复用父加载器的代码。
双亲委派模型的工作过程是:
如果一个类加载器收到了加载请求,它首先不会自己加载这个类,而是把这个请求委派给父加载器去完成,每一个层次的类加载器都是如此,因此所以的加载请求最终都会委派到顶层的启动类加载器中,只有当父加载器反馈自己无法完成这个加载请求时(它的搜索范围内没有找到所需的类),子加载器才会自己去加载。