类连接和初始化

类连接和初始化

类连接主要验证的内容

❤:类文件结构检查:按照JVM规范规定的类文件结构进行

❤:元数据验证:对字节码描述的信息进行语义分析,保证其符合Java语言规范要求(重载、final等)

❤:字节码验证:通过对数据流和控制流进行分析,确保程序语义是合法和符合逻辑的。这里主要对方法体进行校验。

❤:符号引用验证:对类自身以外的信息,也就是常量池中的各种符号引用,进行匹配校验

准备:为类的静态变量准备内存

类连接中的解析:

所谓解析就是把常量池中的符号引用转换成直接引用的过程,包括:符号引用:以一组无歧义的符号来描述所引用的目标,与虚拟机的实现无关

❤:直接引用:直接指向目标的指针、相对偏移量、或是能间接定位到目标的句柄,是何虚拟机实现相关的

❤:主要针对:类、接口、字段、类方法、接口方法、方法类型、方法句柄、调用点限定符

类的初始化:

类的初始化就是类的静态变量赋初始值,或者说是执行类构造器方法的过程

1)如果类还没有加载和连接,就先加载和连接

2)如果类存在父类,且父类没有初始化,那么就要先初始化父类

3)如果类中存在初始化语句,就依次执行这些初始化语句

3)如果是接口的话:

a、初始化一个类的时候,并不会先初始化它实现的接口

b、初始化一个接口时,并不会初始化它的父接口

c、只有当程序首次使用接口里面的变量或者是调用接口方法的时候,才会导致接口初始化。

5)调用ClassLoader类的loadClass方法来装载一个类,并不会初始化这个类,不是对类的主动使用

---- The end of this article ----