类加载的过程是怎样的?
先自己想一想,再看参考要点
参考要点
- 加载:按全限定名取得字节流,转换为方法区的运行时结构,生成 Class 对象
- 验证字节流符合规范、不危害虚拟机
- 准备:为类变量分配内存并设为零值(基本类型或 String、用常量表达式初始化的 static final 常量不经 \<clinit>() 直接取 ConstantValue 的值,《深入理解 Java 虚拟机》把这一步归在准备阶段,JVMS SE 21 写在初始化过程中)
- 解析:把常量池中的符号引用替换为直接引用
- 初始化:执行 \<clinit>(),即类变量赋值和静态语句块,父类先于子类,多线程下只有一个线程执行