classloder的做用
.class文件-->类装载器-->执行引擎-->本地方法-->操做系统java
- class文件能够来自网络服务器等途径,来源比较有可定制性。好比zip文件,网络,甚至运行时动态生成的class
java类装载的委托模型
自定义装载器-->应用类装载器(用户程序的classpath)-->扩展类装载器-->启动类装载器数组
- 老是把类装载请求发给上一层,若是上层没有,再看本身有没有。
- 类文件和类装载器惟一肯定一个类(即类装载器运行时的命名空间)
- defineClass方法
传递给这个方法一个合法的字节数组,就能够转化成class对象
类加载
加载-->链接-->初始化服务器
加载:经过类的全限定名找到类的二进制流。方法区生成该类表明的数据结构。内存生成该类的对象,做为方法区各类数据结构的外部接口网络
链接里有3步数据结构
- 验证 对格式,元数据,字节码,符号引用进行验证
- 准备 将类的静态变量进行内存分配和赋初值
- 解析 将类中的符号引用转化为直接引用
初始化
调用类的clinit构造器方法spa