Class加载过程
class load 进内存 分三步 :
loading 加载
将class文件加载到内存
verification
校验加载进内存的class是否符合jvm规范
preparation
将class文件的静态变量赋默认值 如果 int = 0 long = ol String = null 之类的
resolution
将符号引用转换为直接引用
initializing 初始化
将class文件静态变量赋初始值 调用静态代码块
双亲委派原则
1 Bootstrap 顶级类加载器 lib/rt.jar
2 Extension 扩展类加载器 jre/lib/ext/*.jar
3 App classpath 类加载器 classpath
4 Custom 自定义类加载器
基于双亲委派原则的类加载过程 :
当需要加载一个类的时候 由低到高往上找 看有没有已经加载过的 如果有已经加载了的 直接拿来用
如果找到bootstrap类加载器 都没有加载过 就由高到底去尝试加载 如果可以加载 就直接加载并且返回 反之 继续往下尝试
其实双亲委派是写在loadClass方法中的 调用parent的loadClass()