类加载器 ClassLoader
-
加载类的三个阶段:
- 验证 验证类信息是否正确
- 初始化 给类成员进行初始化
- 解析 将二进制指针,替换成直接引用
-
构造方法的执行流程:
在加载一个类的时候,会优先初始化该类的父类; -
类的加载时机:
- 创建对象
- 使用类成员 static
- 通过反射
- 初始化子类,也会加载该类
- 使用java.exe
-
类加载器:
- BootstrapClassLoader 核心类加载器 用来加载核心类库中的核心文件(.java),用C++实现,所以我们打印出来结果为null
- PlatFromClassLoader(ExtClassLoader) 扩展类加载器 用来加载核心类库中的一些扩展的类文件
- AppClassLoader 用来加载用户自定义的类文件;
-
双亲委派机制:
- 用来防止用户自定义的类,覆盖核心类库中的类;
- jdk java.lang.String
- user java.lang.String { }
- 第一次加载某个类。使用AppClassLoader加载,但是在加载的同时,AppClassLoader会问它的父类,认不认识这个类;