对于类的加载,应该掌握以下几个问题:
- 类的执行过程
- 类的加载过程
- 三种类加载器的职责
- 类的加载机制
- 自定义类加载器
类的执行过程,首先我们通过下图了解一下类是如何被运行的。
1). Java编译器把java源代码(source)翻译为计算机可以读懂的二进制文件,即.class文件,也叫做字节码文件。
2). 然后类加载器加载.class文件,通过JVM分析,加载到内存中,不同类型的变量或者是类的信息会被加载到不同的存储空间上,例如:实例对象或数组会在堆中分配空间存储,基本类型存储在栈上。每一个被加载过的类都会存储在JVM的缓存中。
3). 通过执行引擎,进行解释执行,这里的执行引擎就是Java解释器,Java 解释器负责将字节码文件(.class文件)翻译成具体操作系统平台下的机器代码,按照从上至下的顺序,依次执行。
类的加载过程
1)加载、验证、准备、初始化这四个阶段的发生顺序与图中所描述的顺序相同,唯独解析阶段,它是不太固定的,它有可能发生在初始化之前,但是也有可能发生在初始化之后;
2)这几个阶段也并不是完全执行完某一个阶段,才可以发生下一个阶段,大部分情况下都是交叉混合进行的。
类加载器
JVM预定义了三种类加载器,分别是引导类加载器、拓展类加载器、应用类加载器
双亲委派
自定义一个类加载器,都需要做什么。
1)我们需要通过类的名字,找到对应的.class文件
2)然后将.class文件转为二进制数据
3)最后利用二进制数数据生成Class对象
继承Java中的ClassLoader类–>重写findClass()方法–>在findClass()方法里调用defineClass()将二进制数据转为Class对象。