静态链接,静态分派,动态链接

简介: 静态链接,静态分派,动态链接

静态链接:

编译时即可确认要转换成哪个直接引用。

编译的时候由于能够确定变量的静态类型,所以编译时可知,也就是为什么叫做静态链接的原因。接下来解释下为什么能够确定变量的静态类型并且是怎么确定的。

首先明确一个点:静态类型和实际类型都是可以改变的。唯一不同的是静态类型的变化是通过强转实现的而java中又有对应的强转字节码来获取更改之后得变量的静态类型所以编译时是可以确定变量的静态类型的,但是实际类型需要根据运行时才能够进行确定(下面动态链接详细说明)。

静态链接发生的阶段其实也可以分为:静态分派和解析阶段

解析阶段就是将编译期可以确定不会发生变化的符号引用转换为直接引用。

有以下这些:

这些叫做非虚方法也就是运行时不会发生变化,编译期即可确定

而静态分派则是更改变量的静态类型,但是也可以确定编译时期不会发生变化。

(静态分派和动态分派的区别在于:静态分派是根据静态类型来确定调用的方法是哪个,而动态分配时根据变量的实际类型。由此可以得出静态分派在编译时就可以确定,而动态分派需要运行时)

典型的栗子就是方法的参数是根据参数的静态类型来决定调用哪个方法,重载就是利用的这点实现的,而调用多态则是根据变量的实际类型来确定的,

比如方法的重写。

而且当找不到对应的静态类型的时候在还会默认对静态类型进行转换。

动态链接

编译时不能确认转换成哪个引用要等到运行时才可以确认调用的是哪个方法。

动态链接是和变量的实际类型相关的,因为变量的实际类型不能够在编译时确定只能等到运行时才可以,比如某个条件成立就将这个变量转换为A,不成立转为B(前提这个条件的成立与否必须是运行时才可以确定的,不能够在编译时就能够确认比如if(true) ),这个条件的成立必须是运行时才可进行确定的不能够在编译的时候就知道其实际类型是什么。所以叫做动态链接运行时才可以确定。



相关文章
|
存储 SQL 大数据
dataCompare大数据对比之异源数据对比
dataCompare大数据对比之异源数据对比
723 0
|
监控 项目管理
软件工程IT项目管理复习之 十二:项目采购管理
软件工程IT项目管理复习之 十二:项目采购管理
371 0
|
Java API
Java高效找出两个大数据量List集合中的不同元素
本文将带你了解如何快速的找出两个相似度非常高的List集合里的不同元素。主要通过Java API、List集合双层遍历比较不同、借助Map集合查找三种方式,以及他们之间的执行效率情况。
2085 1
|
11月前
|
供应链 搜索推荐 数据挖掘
电商ERP系统中电商API接口的应用
电商API接口在电子商务中扮演着至关重要的角色,它们允许开发者将电商功能集成到自己的应用程序中,实现商品检索、订单处理、支付、物流跟踪等功能。以下是关于电商API接口的应用:
|
负载均衡 监控 网络协议
Nginx:负载均衡小专题(三)
Nginx:负载均衡小专题(三)
274 1
|
Python
【Python】已解决:TypeError: *init*() missing 1 required positional argument: ‘scheme’
【Python】已解决:TypeError: *init*() missing 1 required positional argument: ‘scheme’
612 0
|
IDE API 数据处理
 鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Slider组件
 鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Slider组件
376 7
|
关系型数据库 Java Maven
maven可选依赖(Optional Dependencies)和依赖排除(Dependency Exclusions)
我们知道,maven的依赖关系是有传递性的。如:A-->B,B-->C。但有时候,项目A可能不是必需依赖C,因此需要在项目A中排除对A的依赖。在maven的依赖管理中,有两种方式可以对依赖关系进行,分别是可选依赖(Optional Dependencies)以及依赖排除(Dependency Exclusions)。
2017 0
|
测试技术 开发工具 git
多人协作多版本开发冲突的正确解决姿势
多人协作多版本开发冲突的正确解决姿势
503 0
多人协作多版本开发冲突的正确解决姿势
|
存储 SQL 自然语言处理
MySQL 模糊查询再也不用like+%了
MySQL 模糊查询再也不用like+%了
MySQL 模糊查询再也不用like+%了