zoukankan      html  css  js  c++  java
  • 8.1.6 解析CONSTANT_Methodref_info入 口

    8.1.6 解析CONSTANT_Methodref_info入 口

    要解析CONSTANT_Methodref_info类型的常量池人口,虚拟机必须先解析class_index项中 指定的CONSTANT_Class_info人口。也就是说,所有CONSTANT_Class_info解析过程中可能抛 出的锗误在解析CONSTANT_Methodref_info的过程屮都可能被抛出。如果解析CONSTANT_Class_info成功,虚拟机在类型和它的超类型中搜索指定的方法。如果找到了指定的方法,虚拟机检査当前类是否有权限去访问这个方法。

    如果解析CONSTANT_Class_info成功完成,虚拟机使用如下步骤来执行方法解析:

    1)如果被解析的类型是一个接口,而非类,虚拟机抛出IncompatibleClassChangeError异常。

    2)否则,被解析的类型是一个类。虚拟机检査被引用的类是否有一个方法符合指定的名字 以及描述符。如果虚拟机找到了这样的一个方法,该方法就是成功的方法搜索结果。

    3)否则,如果类有一个直接超类,虚拟机检查类的直接超类,并且递归地检查类的所有超 类,査看是否有方法符合指定的名字和描述符。如果虚拟机找到了这样的一个方法,该方法就 是成功的方法搜索结果。

    4)否则,虚拟机检查是否这个类直接实现了任何接口,并且递归地检査由类型直接实现的 接口的超接口,察看是否有方法符合指定的名字和描述符。如果虚拟机找到了这样的一个方法, 该方法就是成功的方法搜索结果。

    5)否则,方法搜索失败。

    如果虚拟机没有在被引用的类和它的任何超类型中找到名字、返回类型、参数数量和类型 都符合的方法(方法捜索失败),虚拟机抛出NoSuchMethodError异常。否则,如果方法存在, 但是方法是一个抽象方法,虚拟机抛出AbstractMethodError异常。否则,如杲方法存在,但是当前类没有访问方法的权限,虚拟机抛出IllegalAccessError异常。

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

  • 相关阅读:
    选择器
    asp.net 操作ftp类
    女装类视觉设计感悟
    跨域读取js变色
    关于jQuery的ajax初级应用
    打造前端自动化编译环境(思路)
    <base>标签在ie6下的问题
    通过压缩图片 来提升页面加载速度
    原来我一直不懂cookie
    去处浏览器的默认效果(autocomplete, outline)
  • 原文地址:https://www.cnblogs.com/mongotea/p/11979598.html
Copyright © 2011-2022 走看看