【方法调用(解析与分派)】

news/2024/11/24 13:45:05/

文章目录

    • 方法调用(解析与分派)
    • 小故事

方法调用(解析与分派)

方法调用是指在程序运行时,程序通过方法名来执行这个方法的过程。方法调用的实现需要解析和分派两个步骤。

解析(Resolution)是指确定要调用的方法的过程。这个过程分为静态解析和动态解析两种方式:

静态解析:在编译期间就可以确定要调用的方法。例如,如果程序中有一个方法调用 A.method(),编译器可以根据A的类型来确定要调用哪个A类中的method方法。

动态解析:在运行期间才能确定要调用的方法。例如,如果程序中有一个方法调用obj.method(),obj是一个变量,它的类型只能在运行时确定。因此,在运行时需要进行动态解析。

分派(Dispatch)是指调用方法的过程。分为静态分派和动态分派两种方式:

静态分派:也叫编译时分派。在编译期间就可以确定要调用方法的版本。例如,如果程序中有一个方法调用obj.method(arg1),并且obj的类型是A类,那么编译器在编译时就可以确定要调用哪个版本的A类中的method方法。

动态分派:也叫运行时分派。在运行时根据对象的实际类型来确定要调用方法的版本。例如,如果程序中有一个方法调用obj.method(arg1),并且obj的类型只有在运行时才能确定,那么在运行时需要进行动态分派。

以下是一个示例代码:

class A {void method() {System.out.println("A.method()");}
}class B extends A {void method() {System.out.println("B.method()");}
}public class Main {public static void main(String[] args) {A obj1 = new A();A obj2 = new B();obj1.method();obj2.method();}
}

运行结果为:

A.method()
B.method()

在这个示例中,obj1和obj2的类型都是A,但是obj2实际上是一个B类的实例。在调用obj1.method()时,由于obj1的类型是A,因此静态解析和静态分派都能够确定要调用A类中的method方法。在调用obj2.method()时,由于obj2的类型是B,因此需要通过动态解析和动态分派来确定要调用B类中的method方法。

总之,方法调用是一个非常重要的概念,对于理解面向对象编程和虚拟机原理都有着至关重要的作用。

小故事

有一个小故事可以帮助理解JVM的方法调用。

假设你是一名餐厅服务员,你的工作是服务客人点菜并将菜品送到厨房让厨师制作。在这个过程中,你需要执行以下几步:

  1. 接收客人的点餐请求,了解客人的需求并记录下来。
  2. 根据菜品的种类,将点餐请求分配给对应的厨师,让他们开始制作。
  3. 厨师根据自己的技能和经验,制作出客人点餐的菜品。
  4. 给客人上菜,确保该菜品已经制作完成,并准确无误地送到客人手中。

这个过程和JVM的方法调用十分相似。在JVM中,方法调用的过程包含以下几步:

  1. 确定要调用的方法以及传递给该方法的参数。
  2. 根据方法所属类的类型,选择调用哪个具体的方法。(解析)
  3. 执行方法,根据方法的返回值将结果返回给调用方。(分派)

正如服务员需要根据菜品类型将请求分配给对应的厨师,JVM也需要根据方法所属的类类型来选择具体的方法进行调用,这个过程称为解析。而服务员和厨师的协作需要根据每道菜的不同,让相应的厨师根据自己的技能和经验来制作,JVM中也需要根据方法具体的实现来执行方法,这个过程称为分派。

因此,可以将服务员和厨师的协作过程类比为JVM的方法调用过程。


http://www.ppmy.cn/news/384036.html

相关文章

达人评测 i5 1340P和 r7 7840H对比 i51340P和 r77840H选哪个

r7 7840h采用4nm工艺架构:全新Zen 4核心数:8核线程数:16线程睿频:5.1GHz核显情况:780M集显 TDP功耗 35-54W最高支持内存频率 DDR5-5600,LPDDR5x-7500 选 r77840H还是i51340P这些点很重要 http://www.adiann…

实现阿里云域名的DDNS

实现阿里云域名的DDNS 目前现状与痛点 我们在使用ddns的时候会不会遇到这样的问题:路由器只支持指定的域名服务提供商或者是指定的域名,比如我的华为路由器就只支持花生壳: 我想看到这篇文章的小伙伴们应该都把域名注册到中国最大的域名注…

MT41K512M16VRP-107 AIT:P内存颗粒D9ZWM

MT41K512M16VRP-107 AIT:P内存颗粒D9ZWM 美光宣布,联发科已经在最新的智能手机 5G 旗舰芯片组天玑 9000 上验证了美光的 LPDDR5X 内存。同时,美光也是首家对 LPDDR5X 内存取样和验证的半导体公司,首批 1α 工艺打造的 LPDDR5X 内存样品现已交…

MT6771 MFNR

MT6771 MFNR流程介绍 这是MFNR的流程,包含4个流程:before NR、MFP、MAR、After NREE。 N*lraw:输入的RAW图,在MT6771平台上,N在2~6之间 N*lbfbld:准备进行多帧融合的N张图像 lmfb:多帧融合后的图像 lmar:运动区域处理后的图像 loutput:经…

SpringBoot中事务失效的场景(含示例代码)

在使用SpringBoot的开发过程中,我们有时候会遇到明明加了事务但是却不生效的场景,今天就稍微整理一下。 场景一: 方法未被声明为事务:在Spring Boot中,事务是基于注解或XML配置的方式进行声明的。如果一个方法没有被…

锐龙r74800h和i710750h差距大吗 r74800h和i710750h对比

问起锐龙R7-4800H和酷睿i7-10750H,我觉得脱离了笔记本其他配件或者是笔记本用途,不太好单一去比较具体哪一个CPU更好。但是就目前我身边绝大部分朋友的需求来说,选择高端配置的用户,多数都是需要一台游戏本。 所以这里着重比较一下…

优思学院|质量管理六大思维陷阱【四】:抽样检查是最经济又能保证质量的方法吗?

在质量控制的过程中,一个常见的误解是认为抽样检查是最经济又能保证质量的方法。许多人认为进行百分之百的全数检查既浪费人力又时间不够。因此,他们倾向于采用抽样检查的方法,认为这样既符合经济成本,又能确保产品质量的水准。 …

一分钟了解物联存储柜的特点和功能

物联存储柜是一种智能存储柜,具有多种传感器和通信技术,集成物联网和云计算技术,通过自动化、智能化、网络化将传统存储柜与智能设备相结合,自动识别、存取物品,通过网络进行数据交互,实现远程监测和管理功…