加载:
1.从硬盘讲class文件中的二进制数据读入到内存中。
2.将其放在运行时数据区的方法区内
3.在堆区创建一个java.lang.Class对象,用来封装类在方法区的数据结构
连接:
▶ 验证:确保被加载的类的正确性
1)类文件的结构检查。确保类文件遵从java类文件的固定格式。
2)语义检查,确保类本身符合java语言的语法规定,比如验证final类型的类没有子类,以及final类型的方法没有被覆盖。
3)字节码验证,确保字节码流可以被java虚拟机安全地执行。字节码流代表java方法(包括静态方法和实例方法)。
4)二进制兼容性的验证
▶ 为类的静态变量分配内存,并将其初始化为默认值
▶ 解析:把类的符号引用转换为直接引用
初始化:为类的静态变量赋予正确的初始值。