Link
Verify
class字节码是以 CA FE BA BE 开头.
后面的 12 个字节是描述class 文件对应的jvm 版本.
Prepare
为类变量分配内存并设置该类变量的默认初始值. 零值
注: final 类型变量在编译的时候就分配了值
在上图的时候, static 类型的a,在prepare的时候,值是0
Resolve
将常量池内的符号引用转为直接引用
比如在此类中用到了其他类和方法. 这时候就会对这些类标识为字符串.
此方法会将所有类变量 赋值 动作和 static 代码块合并而来. 形成的方法
如果 类中没有 static 变量或者 static code bunk.
就没有 Clinit 方法
构造器函数
类加载器
Bootstrap
Extension
SystemClassLoader
略
自定义
1 隔离加载类
2 修改类加载方式
3 扩展加载源
4 防止源码泄漏
我们 继承 ClassLoader 重写 findClass 方法,
ClassLoader常用方法
略
双亲委派机制
1 防止类重复加载.
沙箱机制
略... ...
类的使用
主动
1. 创建类实例
2. 访问类或接口的静态变量,或对该类静态变量赋值
3. 调用类静态方法
4. 反射
5. 初始化一个类的子类
6. Java虚拟机启动时被标明为启动类的类
7. jdk7 开始提供的动态语言的支持
被动
略 ... ...