跳到主要内容

简述在方法调用的时候,方法查询-> 动态解析-> 消息转发 之前做了什么 ? ?

参考答案:

在方法调用时,从方法查询到动态解析再到消息转发之前,主要进行了以下步骤:

  1. 方法查询

    • 缓存查找:首先,系统会在方法接收者的缓存(cache)中查找是否已经缓存了该方法。缓存的目的是为了提高方法的查找速度,如果方法已经被调用过并且结果被缓存,那么直接从缓存中获取方法可以避免再次进行方法的查找和解析,从而提高执行效率。
    • 方法列表查找:如果缓存中没有找到对应的方法,系统会继续在方法接收者的方法列表中查找。方法列表通常包含了类中定义的所有方法的信息。
    • 父类查找:如果方法接收者自己的方法列表中也没有找到对应的方法,系统还会进一步在方法接收者的父类中进行查找。这是面向对象编程中继承机制的一部分,子类可以继承父类中的方法。
  2. 参数匹配

    • 在找到方法之后,系统需要确保传递的参数与方法的参数列表匹配。这涉及到参数类型的检查和数量的核对。如果参数不匹配,方法调用会失败,并可能抛出异常。
  3. 方法准备

    • 一旦找到匹配的方法并且参数也匹配,系统会进行方法的准备工作。这可能包括为方法分配执行所需的资源,例如栈空间来保存局部变量等。

在上述步骤都完成之后,如果方法调用仍然无法直接执行(例如,方法不存在或者参数不匹配),系统就会进入动态解析阶段。动态解析是一种在运行时解析和创建方法的能力,它允许程序在运行时动态地添加或修改方法的行为。

如果动态解析也无法解决问题,系统就会进入消息转发阶段。消息转发是当对象接收到无法解读的消息时,启动的一种机制。在这个阶段,程序员可以通过自定义的转发逻辑来处理未知的消息,例如将消息转发给其他对象或者执行一些默认的操作。

综上所述,在方法调用时,从方法查询到动态解析再到消息转发之前,主要进行了方法的缓存查找、方法列表查找、父类查找、参数匹配以及方法的准备工作。这些步骤确保了方法调用的正确性和有效性,为后续的动态解析和消息转发提供了基础。