- 浏览: 463267 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (369)
- javascript html (20)
- java (31)
- jquery (15)
- jcrop (0)
- JEECG (1)
- ajax (3)
- 反射 (3)
- VI (1)
- mysql (48)
- easyui (1)
- svn (2)
- MD5 加密 (1)
- spring (14)
- ORACLE (8)
- 经验总结 (1)
- TCP/IP协议 (1)
- ICMP协议 (1)
- eclipse (1)
- Reflect (1)
- linux (21)
- android (5)
- excel 操作 (1)
- java tree (1)
- html (1)
- plupload (1)
- mongodb (9)
- aes (1)
- python (1)
- java relax (1)
- highcharts (2)
- json (2)
- java 多线程 (30)
- maven (2)
- 设计模式 (1)
- jsp+js (2)
- 面向对象 (1)
- jvm (16)
- 缓存 (1)
- proxy (1)
- 聊侃 (1)
- 面经 (1)
- java 字节 (1)
- java 类加载器 (2)
- java 基础 (2)
- java 语法糖 (1)
- java 位运算 (1)
- 排序 (3)
- java 服务器性能优化 (19)
- 网络编程 (2)
- jvm 参数设置 (0)
- jersey (1)
- webservice (2)
- nginx+多tomcat 集成 (5)
- nginx (16)
- squid (3)
- memcached (5)
- 正则表达式 (1)
- 常用免费接口 (1)
- jpa (1)
- win7 (1)
- java处理大文件 (1)
- js正则表达式 (1)
- tomcat (1)
- java 敏感字 (1)
- 系统架构优化 (4)
- 学习 (1)
- 本地测试QQ微博第三方登陆 (1)
- java 错误 (1)
- 微信支付 (1)
- https (1)
- httpclient (1)
- awk (2)
- loadrunner (1)
- sql server 2008 (3)
- git (4)
- sql server2008 (1)
- solr (2)
- centos (1)
- 数据存储架构 (3)
- log4j (1)
- weboffice (1)
- 并发编程 (1)
- postgreSQL (0)
- ssl (1)
- openssl (1)
- activeMQ (2)
- IDEA (1)
- shell (1)
- ansible (4)
- docker (2)
- grafana (1)
- jmeter (1)
- TLS (1)
- 将博客搬至CSDN (1)
最新评论
-
dida1990:
啊喔,过去了这么久,不过还是评一个。谁说uuid的hashCo ...
高并发生成订单号(二) -
annan211:
yclovesun 写道使用了uuid,为什么还要machin ...
高并发生成订单号(二) -
yclovesun:
使用了uuid,为什么还要machineId?uuid已经可以 ...
高并发生成订单号(二) -
u013280917:
太深奥,看不懂
mysql优化特定类型的查询
Java 语言的静态多分派和动态单分派特性。
先来熟悉概念:
静态多分派:
静态分派 意思是 所有依赖静态类型来定位方法执行版本的分派过程就叫做静态分派,静态分派最典型的应用就是方法重载。
动态单分派:
动态单分派 意思是 根据运行期实际类型确定方法执行版本的分派过程叫做动态分派,动态分派最典型的应用就是方法重写。
再来看看单分派和多分派
单分派: 就是说 依据只有一个
多分派:就是说 依据可以有多个
那Java里面的静态多分派 意思就是,依赖静态类型来确定方法执行版本的时候,可以依据多个证据。
举个例子:
上面这段代码 输出的时候 如果存在char 参数,就输出char,如果不存在char参数,就先转为int 输出int,以此类推,会以此输出 long float double,Character , Sezrizable ,Object , ...
可以看出 多参数的优先级最低,输出 Sezrizable 是因为 其类型实现了 Sezrizable 接口
静态方法是在类加载期就进行编译,方法执行版本的选择也是静态分派进行的。依据也不是唯一的。
动态单分派 简单点就是 运行时根据确切的类型来确定执行方法的版本,而且依据是唯一的。
编译器在编译期间 存在静态分派的过程,在确定执行的方法版本的时候 存在两个依据,一个是 方法参数的类型,一个是 父类的类型。
很明显 输出的 是根据 new 出来的是哪个对象 就调用哪个对象的方法,也就是说编译器忽略了参数的类型的影响,唯一存在影响的是 此方法的接收类型,因为这是动态单分派呀,我日。
先来熟悉概念:
静态多分派:
静态分派 意思是 所有依赖静态类型来定位方法执行版本的分派过程就叫做静态分派,静态分派最典型的应用就是方法重载。
动态单分派:
动态单分派 意思是 根据运行期实际类型确定方法执行版本的分派过程叫做动态分派,动态分派最典型的应用就是方法重写。
再来看看单分派和多分派
单分派: 就是说 依据只有一个
多分派:就是说 依据可以有多个
那Java里面的静态多分派 意思就是,依赖静态类型来确定方法执行版本的时候,可以依据多个证据。
举个例子:
public class Loder { public static void fu(char a){ System.out.println("char"); } public static void fu(int a){ System.out.println("int"); } public static void fu(long a){ System.out.println("long"); } public static void fu(float a){ System.out.println("float"); } public static void fu(double a){ System.out.println("double"); } public static void main(String[] args) { fu('a'); } public static void fu(Character a){ System.out.println("Character "); } public static void fu(char ... a){ System.out.println("..."); } public static void fu(Sezrizable a){ System.out.println("Sezrizable "); } public static void fu(Object a){ System.out.println("Object "); } }
上面这段代码 输出的时候 如果存在char 参数,就输出char,如果不存在char参数,就先转为int 输出int,以此类推,会以此输出 long float double,Character , Sezrizable ,Object , ...
可以看出 多参数的优先级最低,输出 Sezrizable 是因为 其类型实现了 Sezrizable 接口
静态方法是在类加载期就进行编译,方法执行版本的选择也是静态分派进行的。依据也不是唯一的。
动态单分派 简单点就是 运行时根据确切的类型来确定执行方法的版本,而且依据是唯一的。
public class DynamicDisplay { public static void main(String[] args) { QQ q = new QQ(); PP p = new PP(); B b = new BB(); B b2 = new B(); b.dd(q); b2.dd(p); } static class BB extends B{ public void dd(QQ a){ System.out.println("BB--BB"); } public void dd(PP a){ System.out.println("PP--PP"); } } } class B{ public void dd(QQ q){ System.out.println("QQQQ"); } public void dd(PP q){ System.out.println("PPPP"); } } class QQ{ } class PP{ }
编译器在编译期间 存在静态分派的过程,在确定执行的方法版本的时候 存在两个依据,一个是 方法参数的类型,一个是 父类的类型。
很明显 输出的 是根据 new 出来的是哪个对象 就调用哪个对象的方法,也就是说编译器忽略了参数的类型的影响,唯一存在影响的是 此方法的接收类型,因为这是动态单分派呀,我日。
发表评论
-
实现虚拟机VMware上linux与windows互相复制与粘贴
2014-11-17 13:15 1351实现虚拟机VMware上linux与windows互相复制 ... -
java 虚拟机线程与操作系统内核线程之间的关系
2014-09-23 15:13 4693java jdk 中 线程操作与虚拟机中线程操作之间的关系映射 ... -
java 语法糖 分析(一,泛型与类型擦除)
2014-09-18 11:14 543语法糖是一种计算机术语,是为了更加方便理解计算机语言或者说 ... -
Java 读写锁demo
2014-09-11 15:27 736java 读写锁 原理 和 实例 package thread ... -
字节码验证 的高度对jvm的优化
2014-09-09 16:08 1169程序员对虚拟机的优化 ... -
接口与类的真正区别
2014-09-09 14:50 441接口与类不存在区别,除了字面修饰符不同外,其真正区别是: 当 ... -
jvm 初始化static 变量的类顺序
2014-09-09 14:42 727class Nolization{ static{ ... -
java static 类型变量定义技巧
2014-09-05 18:33 888java 变量的定义非常重要,在一定程度上可以减轻服务 ... -
eclipse 启动参数配置
2014-09-05 16:44 402参数见附件 -
too many open files 异常
2014-09-05 14:08 553每个Socket 连接都有 Receive 和 s ... -
堆转储快照(dump)的分析
2014-09-05 13:50 1100dump ,堆转储快照的详细分析,后面分析啊,现在没时 ... -
高性能硬件上的程序部署策略
2014-09-04 18:12 515一个15万pv、天左右 ... -
jsp 页面 查看线程堆栈状况
2014-09-04 15:53 672jsp 页面 查看线程堆栈信息状况 具体见 附件 -
jvm 本地方法栈(native Method stacks) 基本概念
2014-09-03 15:38 1116Java 虚拟机 运行时数据区域 一般可区分为 :方法区,堆 ... -
jvm 栈 基本概念
2014-09-03 15:10 547java 程序员 通常把java程序运行时的内存 分为 堆内存 ...
相关推荐
Java的动态分派和静态分派的实现 Java 的动态分派和静态分派是 Java 实现多态的本质背景。Java 的动态分派和静态分派也是 Java 方法的执行原理。在 Java 中,方法的调用是使用符号引用来表示的。当字节码被 JVM ...
多态性的实现主要依赖于两种机制:静态分派和动态分派。本文将深入探讨这两种机制及其在Java虚拟机(JVM)中的应用。 **静态分派(Static Dispatch)** 静态分派发生在编译期间,即在程序执行前就已经确定了方法...
静态多分派和动态单分派,以及重载、继承、接口多实现、基类单继承、抽象类和接口、方法覆盖和多态等概念,构成了Java语言的复杂性和灵活性。 总的来说,掌握上述技术点不仅能够提升开发者编写高质量代码的能力,也...
动态绑定,又称晚期绑定或虚函数调用,是Java等面向对象语言的一种特性,它允许在运行时根据对象的实际类型决定调用哪个方法。 动态绑定在Java中体现在继承体系中的方法覆盖。当一个父类引用指向子类对象时,即使...
分派还可以根据宗量数(影响方法选择的因素)进一步划分为静态单分派、静态多分派、动态单分派和动态多分派。静态分派只考虑静态类型,而动态分派则依赖于实际类型。Java中主要是静态分派和动态分派,但不支持静态多...
静态分派是JVM 方法调用中的一种机制,根据分派依据的宗量数可分为单分派和多分派。静态分派的典型应用是方法重载,发生在编译阶段,因此确定静态分派的动作实际上不是由虚拟机来执行的。静态类型是变量的静态类型,...
7. 面向对象编程:理解封装、继承和多态这三大面向对象特性,以及静态多分派和动态单分派的概念。熟悉重载、继承(接口多实现,基类单继承)、抽象类、接口和多态(方法覆盖)的运用。 8. 静态关键字:了解static...
理解它们的概念、应用场景,以及静态多分派和动态单分派、重载、接口多实现、基类单继承、抽象类、接口、多态(方法覆盖和接口回调)等概念,是成为合格Java开发者的必备条件。 最后,静态属性(Static)是Java中的...
在Java编程中,动态绑定和静态绑定是两种不同的方法调用机制,它们分别适用于不同的场景。动态绑定,也称为晚期绑定或多态性,是指在程序运行时根据对象的实际类型来决定调用哪个方法。静态绑定,又称为早期绑定,是...
例如,了解静态多分派和动态单分派的概念,方法重载的规则,接口多实现和类单继承的原则,以及抽象类、接口和多态的运用。 静态属性在Java开发中扮演着重要角色。开发者需要理解静态属性的概念,它们在类加载时如何...
这些组合形成了不同的分派策略,例如静态单分派、静态多分派、动态单分派和动态多分派。 在静态分派中,如Java的多态方法重载,调用版本在编译时就已经确定。而在动态分派中,如方法覆写,调用版本取决于运行时对象...
了解静态多分派和动态单分派的概念,以及重载和继承的使用,有助于设计出可扩展和可维护的代码。 静态属性和方法在Java中扮演着重要角色。理解static关键字的用法,包括静态变量的初始化、静态方法的调用,以及...
- **静态多分派与动态单分派**:了解方法调用时的解析策略。 - **重载与覆盖**:理解方法重载的规则和覆盖的概念。 - **继承与接口**:接口多实现和类单继承的特性。 - **抽象与抽象类**:理解抽象类和接口的...
分派是JVM确定具体调用哪个方法的过程,分为静态分派(编译时已知目标)、动态分派(运行时确定目标)、单分派(依据单一宗量)和多分派(依据多个宗量)。Java中的方法重载(Overloading)属于静态多分派,而方法...
Java中的方法分派包括静态分派和动态分派,这个类可能包含关于多态性或方法重载的示例。 这些类涵盖了Java编程中的多个方面,包括集合操作、持久化、GUI布局、对象序列化、库管理以及测试实践。了解这些知识点对于...
- **静态多分派与动态单分派**:理解方法调用时的分派策略。 - **重载**:了解方法重载的规则和应用场景。 - **继承**:接口的多实现和类的单继承,以及super关键字的使用。 - **抽象类与接口**:理解两者的区别...
- **静态多分派与动态单分派**:了解方法调用的解析机制。 - **重载与覆盖**:理解方法重载的条件和方法覆盖的概念。 - **接口与继承**:接口多实现与类单继承,以及抽象类和接口的区别。 - **多态性**:了解...
- **静态多分派与动态单分派**:理解这两个概念在方法调用中的区别。 - **重载**:学习方法重载的规则,以及何时使用。 - **继承与接口**:了解单继承和多实现的特性,以及接口在设计模式中的作用。 - **抽象与...