类加载的过程
- 验证:根据JVM规范来校验
.class
文件是否符合要求,只有符合要求的.class
类文件才能被加载到JVM中 - 准备:给
static
变量分配内存空间并赋0值
- 解析:把符号引用替换为直接引用
- 初始化:给变量赋初始值,执行
static语句块
类加载器和双亲委派机制
类加载器
JVM中的类加载器有
- Bootstrap ClassLoader:加载
JDK目录下的lib
目录下的类 - Extension ClassLoader:加载
lib/ext
目录下的类 - Application ClassLoader:加载
ClassPath
路径下的类,即你写的类 - 自定义ClassLoader:自定义类加载器,根据用户需求加载类
双亲委派机制
JVM中的类加载器是有层级结构的,从父到子依次为BootstrapClassLoader、ExtensionClassLoader、ApplicationClassLoader、自定义ClassLoader
双亲委派机制的意思就是,如果一个类加载器需要加载某个类,那么首先它会将该类的加载权交给自己的父加载器,如果父加载器不能加载该类,再由当前加载器来加载