Java静态绑定和动态绑定

java动态绑定和静态绑定

在Java中,绑定是指将一个方法调用与方法体连接起来的过程。Java支持两种类型的绑定:静态绑定(也称为早期绑定)和动态绑定(也称为晚期绑定或虚拟调用)。区分这两种绑定方式主要取决于方法调用在编译时还是运行时被解析和确定。

静态绑定(Static Binding)

静态绑定发生在编译时期。编译器知道对象的类型以及被调用的方法,因此它能够将一个方法调用与方法体链接起来。静态绑定适用于以下情况:

  • 调用的方法是privatestaticfinal或者构造函数。由于这些方法不能被重写,因此它们的调用可以在编译时刻就完全确定下来。
  • 方法调用中使用的类型可以通过代码直接确定。

静态绑定的主要优点是效率。由于方法调用在编译时就已经确定,运行时不需要花费时间去查找应该调用的方法。

动态绑定(Dynamic Binding)

动态绑定发生在运行时期。Java虚拟机(JVM)根据对象的实际类型(而不是变量的声明类型)来决定应该调用哪个方法。动态绑定适用于大多数普通方法调用,特别是涉及方法重写的情况:

  • 当一个方法在子类中被重写时,具体调用哪个方法(父类中的方法还是子类中重写的方法)将在运行时根据对象的实际类型来决定。
  • 动态绑定允许Java实现多态。通过引用变量可以引用不同类型的对象,并且在调用重写的方法时,可以根据对象的实际类型来执行相应的方法版本。

动态绑定通过在对象的方法区存储一个指向方法的指针(在Java中称为虚拟方法表)来实现,运行时会根据这个指针来调用正确的方法。

示例

class Animal {
    void eat() {
        System.out.println("Animal is eating");
    }
}

class Dog extends Animal {
    @Override
    void eat() {
        System.out.println("Dog is eating");
    }

    static void sleep() {
        System.out.println("Dog is sleeping");
    }
}

public class TestBinding {
    public static void main(String[] args) {
        Animal myDog = new Dog();
        myDog.eat(); // 动态绑定:输出 "Dog is eating"

        Dog.sleep(); // 静态绑定:输出 "Dog is sleeping"
    }
}

在这个例子中,eat()方法展示了动态绑定,因为它是在运行时根据对象的实际类型调用的方法。而sleep()方法是静态的,展示了静态绑定,它的调用在编译时就已经确定。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/559732.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

线上真实案例之执行一段逻辑后报错Communications link failure

1.问题发现 在开发某个项目的一个定时任务计算经销商返利的功能时,有一个返利监测的调度,如果某一天返利计算调度失败了,需要重新计算,这个监测的调度就会重新计算某天的数据。 在UAT测试通过,发布生产后&#xff0c…

NVIDIA安装程序失败-Nsight Visual Studio Edition失败解决办法

博主是要升级cuda版本,那么在安装新版本之前需要卸载以前的版本。 博主一溜卸载下去,最后有这么个东西卸载不掉,Nsight Visual Studio Edition 不管是电脑系统卸载还是360卸载,都卸载不掉。 此时安装新的cuda也遇到了这个问题 由…

PLC存储器分类及西门子SIMATIC S7-1200存储器参数

存储器用来储存程序和数据,分为系统存储器和用户存储器。 系统存储器存放由PLC生产厂商编写好的系统程序,并固化在只读存储器(ROM)内,用户不能修改。用户存储器存放用户根据控制要求编写的应用程序。目前大多数PLC采用…

面试经典150题——从中序与后序遍历序列构造二叉树

1. 题目描述 2. 题目分析与解析 其实这个题目和昨天那个很相似,思考思路如下: 解决从中序(inorder)与后序(postorder)遍历序列构造二叉树的问题时,考虑到这两个遍历序列为我们提供了树结构中…

解决方案 SHUTDOWN_STATE xmlrpclib.py line: 794 ERROR: supervisor shutting down

Supervisor操作命令 重新加载 Supervisor 配置: sudo supervisorctl reread sudo supervisorctl update sudo supervisorctl restart all这将重新读取 Supervisor 的配置文件,更新进程组,然后重启所有进程。 查看 Supervisor 日志&#xff1…

尺取法知识点讲解

一、固定长度的情况: 最小和(sum) 输入N个数的数列,所有相邻的M个数的和共有N-M1个,求其中的最小值。 输入格式 第1行,2个整数N,M,范围在[3…100000],N>M。 第2行,有N个正…

R语言入门:“Hellinger“转化和“normalize“转化(弦转化)的公式表示与R代码实现

1、写在前面 vegan包中的decostand()函数为群落生态学研究提供了一些流行的(和有效的)标准化方法。有关decostand()函数标准化的一些标准化方法可以看我的另一篇笔记:R语言入门:vegan包使用decostand()函数标准化方法 由于在网络上没有找到关于这两个转…

Redis-键值设计

Redis-键值设计 1.设置key的规范 遵循基本格式:【业务名称】:【数据名】:【id】 可读性强,在客户端的情况下使用:如果前缀相同会分目录层级长度不超过44字节 string数据结构的三种类型,在44字节之内是embstring 内存…

鸿蒙应用开发之Web组件3

前面学习了从网上加载网页的显示,本文将要学习加载本地的网页。比如很多显示的内容,可以制作网页的文件格式,然后直接使用它来显示,就可以减少界面的制作。另外,当手机没有网络的时候,如果想从网络上获取内容就会失败,这时候可以使用本地的网页内容来代替。这样不会导致…

Python的Logging模块高级用法-日志处理

👽发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 探索Python中的日志处理:Logging模块的高级用法 在Python应用程序中&#xff0…

lementui el-menu侧边栏占满高度且不超出视口

做了几次老是忘记,这次整理好逻辑做个笔记方便重复利用; 问题:elementui的侧边栏是占不满高度的;但是使用100vh又会超出视口高度不美观; 解决办法: 1.获取到侧边栏底部到视口顶部的距离 2.获取到视口的高…

【动态规划】dp 路径问题(不同路径、路径最小和、地下城游戏...)

文章目录 1. 前言 - 理解动态规划算法1.5 关于dp路径问题2. 例题2.1_不同路径Warning. 关于状态表示 3. 算法题3.1_不同路径II3.2_珠宝的最高价值3.3_下降路径最小和3.4_最小路径和3.5_地下城游戏关于状态表示的两种选法: 1. 前言 - 理解动态规划算法 关于 动态规划…

Pytorch 之torch.nn初探 池化--Pooling Layers

任务描述 本关任务:本关提供了一个Variable 类型的变量x,要求按照条件创建一个Conv2d变量conv,一个MaxPool2d变量pool,对x应用卷积和最大池化操作并赋值给变量outpout_pool,并输出outpout_pool 的大小。 相关知识 P…

Blerden4.1基础操作方法

软件安装 下载软件地址 中文文档 偏好设置 编辑——》偏好设置——》界面——》设置分辨率缩放 1.20 方便观看字体 设置快捷键 是为了方便几个3d软件都变成同一种操作方式 这样就不会自己搞混了 编辑——》偏好设置——》键位映射——》3D视图——》3D视图(全局…

将windows作为网关

开启转发 reg add HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters /v IPEnableRouter /D 1 /f开启routing and remote access服务 这样局域网里面别的设备能通过windows进行上网 参考:https://www.cnblogs.com/chrishg/articles/12861053.html

Springboot+Vue项目-基于Java+MySQL的房屋租赁系统(附源码+演示视频+LW)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:Java毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计 &…

OceanBase V4.2特性解析:用 Show Trace 快速定位数据库性能瓶颈

在数据库日常运维中,当遇到慢SQL问题时,若无法迅速查明原因,将极大地影响用户的使用感受,甚至可能引发业务或服务的中断。相较于单机数据库,分布式数据库系统因其涉及多个节点和多组件的协同工作,集群规模可…

短视频流媒体平台的系统设计

1. 功能需求: 我们的系统有两类参与者 内容创作者 •上传任何类型的视频(格式编解码器)•视频可以被删除•视频元数据•必填项: 标题,作者,描述•选填项: 分类/标签列表•可以随时更新•当视频对观众可用时,向内容创作…

怎么把相机储存卡里的照片导出来?介绍两种方法

随着摄影技术的不断发展和普及,相机已成为我们记录生活、捕捉美好瞬间的设备。然而,对于许多摄影爱好者来说,如何将相机储存卡里的照片安全、高效地导出到电脑或其他设备中,却成为了一个令人头疼的问题。本文将为您详细介绍从相机…

17.C++常用的算法_集合算法

文章目录 遍历算法1. set_intersection()代码工程运行结果 2. set_union()代码工程运行结果 3. set_difference()代码工程运行结果 遍历算法 1. set_intersection() 代码工程 /*1.求交集的两个集合必须是有序序列*/ /*2.目标容器开辟空间需要从两个容器中取较小值*/ /*3.set…
最新文章