8.1.5 解析CONSTANT_Fieldref_info入口

8.1.5 解析CONSTANT_Fieldref_info入口
要解析类型是CONSTANT_Fieldref_info的常量池入口,虚拟机必须首先解析class_index项 中指明的CONSTANT_Class_info入口。因此,解析CONSTANT_Fieldref_info时可能抛出任何因 解析CONSTANT_Class_info而抛出的错误。如果CONSTANT_Class_info解析成功,虚拟机在此 类型和它的超类型上搜索所需要的字段。如果找到了需要的字段,虚拟机要检查当前类是否拥 有访问这个字段的权限。

如果解析CONSTANT_Class_info成功完成,虚拟机按照如下步骤执行字段搜索过程:

1)虚拟机在被引用的类型中查找具有指定的名字和类型的字段。如果虚拟机找到了这样一 个字段,这个字段就是成功的字段搜索结果。

2)否则,虚拟机检查类型直接实现或扩展的接口,以及递归地检查它们的超接口。如果找到了名字和类型都符合的字段,这个字段就是成功的字段搜索结果。

3)否则,如果类型拥有一个直接的超类,虚拟机检查类型的直接超类,并且递归地检查类 型的所有超类。如果找到了名字和类型都符合的字段,这个字段就是成功的字段搜索结果。

4)否则,字段搜索失败。

如果虚拟机在被引用的类或者任何它的超类型中没有找到名字和类型都符合的字段(字段 搜索失败),虚拟机就抛出NoSuchFieldError异常。否则,如果字段搜索成功了,但是当前的类没有权限去访问该字段,虚拟机就抛出IllegalAccessError异常。

否则,虚拟机把这个人口标记为巳解析,并在这个常量池人口的数据中放上指向这个字段的直接引用。

原文地址:https://www.cnblogs.com/mongotea/p/11979592.html