对JVM分派概念的理解

来源:互联网 发布:c语言告白 编辑:程序博客网 时间:2024/05/22 00:13

最近在看《深入理解Java虚拟机》这本书,其中看到一个概念,感觉以前没有遇到到。那就是分派
以下是我了解了分派相关概念后的理解与总结

分派

首先什么是分派呢?所谓分派,主要是针对一个方法来讲的,即方法分派。那么所谓方法分派,就是虚拟机如何确定应该执行哪个方法!
通过了解分派,可以让我们了解到面向对象编程三大特性(继承、封装、多态)之一的多态,在JAVA语言中实现的原理。

说到分派,它又可以为静态分派、动态分派、单分派、多分派
多态是依赖于类的继承关系的,下面的概念都是基于继承环境下解释的
下面对每一个概念进行解释

静态分派

静态类型与实际类型

在介绍静态分派之前,需要先了解什么是另外两个词,静态类型与实际类型
静态类型(或外观类型),如有这样的两个类,其继承关系为Cat extends Animal,
在调用时这样调用

Animal tomcat = new Cat();

那么这里的tomcat变量它的静态类型就是Animal
它的动态类型就是Cat

静态类型解释

在了解了静态类型与动态概念后,再了解下静态类型的定义:所有依赖静态类型来定位方法执行的分派动作称为静态分派
其比较典型的在JAVA中的应用是重载的实现原理。这里不就说DEMO了,DEMO参见下方的链接。
对于重载(overload)这个概念想必大家都非常了解,也就是方法名称相同,但参数类型或个数不同。
上面的定义用比较通俗的话来解释是,JVM在重载时(发生在编译阶段),是通过参数的静态类型来作为判断依据去找相关的执行方法的,以静态类型的方法为准。

动态分派

上面说了重载(overload)的实现原理,这里说下重写(overWrite)的原理。
定义:在运行期根据实际类型确定执行方法的过程称为动态分派。
也就是重写时JVM选择哪个执行的方法,是根据变量的实际类型来判断的,执行实际类型的那个方法。

单分派

宗量

由于单分派与多分派是根据宗量这个基准来划分的。所以首先了解下什么是宗量。
宗量:方法的接收者与方法的参数统称为方法的宗量。

单分派定义

根据一个宗量对目标方法进行选择,即为单分派。(动态分派属于单分派)

多分派

根据多于一个宗量对目标方法进行选择,即为多分派。(静态分派属于多分派)


对于比较详细一点的介绍,可以查看此链接的地址,有相关的代码实例,写得也比较详细,链接地址:【深入理解JVM】:解析与分派

原创粉丝点击