将符号引用转为了直接引用
就是将class文件中写明的字面量形式明确定义在Java虚拟机规范的Class文件格式中
直接引用:就是直接指向目标的指针,可以定位到目标的句柄,有了直接引用,说明引用的目标已经在内存中存在了
具体的解析:
1.类或者接口的解析,如果一个没有解析的符号解析成某个类或者接口的直接引用,需要如下过程
如果不是一个数组的类型,那么会将被解析的类的全限定类名传递给其,让其解析,在此过程中,可能会触发其他类的加载动作,一旦有一个出现了异常,那么解析就会失败
如果是一个数组,那么也会进行如上解析,但是描述可能会发生改变
如果没有任何异常,这就已经是一个有效的类或者接口了
2.字段的解析
解析一个字段的流程如下,首先解析这个类的符号引用,如果出现异常则终止操作,成功则继续,如果只有简单的名称和相对应的字段,则直接结束
如果其中包含了接口,则查找接口的子父类,查看是否包含简单名称和字段描述符都符合
如果连Object类都不继承的话,只能找父类关系
不然就抛出 NoSuchFieldError异常
3.类方法的解析
解析出class_index项中索引的方法所属的类或者接口的符号引用
首先在解析的时候查看到这个方法是在接口中的,直接抛出异常
如果不是的话,在该类中查找是否有匹配的方法
在之后在父类中查找是否有相匹配的方法
最后在实现的接口的列表或者父接口中查找是否有匹配的方法,有就说明这是一个抽象类,连着都没有则抛出异常
4.接口方法的解析
类似同上,如果发现索引是个类不是接口.也会抛出异常
不然在接口中查找是否有匹配的方法
在之后在父类中查找
不然只能抛出异常