Java动态绑定和静态绑定

2023-10-27

Java动态绑定和静态绑定

程序绑定

程序绑定:一个方法的调用与方法所在的类(方法主题)关联起来,即计算机要明确最终执行的方法是谁的方法。对Java来说,绑定分为静态绑定和动态绑定;或者叫做前期绑定和后期绑定

静态绑定

在程序执行前方法已经被绑定(在编译过程中就已经明确这个方法是哪个类的方法),此时,由编译器或其它连接程序实现。

注意:Java中只有 final,static,private修饰的方法和构造方法是前期绑定的。

关于final,static,private和构造方法是前期绑定的理解
1、对于private的方法,首先它不能被继承,既然不能被继承那么就没办法通过它子类的对象来调用,而只能通过这个类自身的对象来调用。因此就可以说private方法和定义这个方法的类绑定在了一起。
2、final方法虽然可以被继承,但不能被重写(覆盖),虽然子类对象可以调用,但是调用的都是父类中所定义的那个final方法,(由此我们可以知道将方法声明为final类型,一是为了防止方法被覆盖,二是为了有效地关闭java中的动态绑定)。
3、对于static方法:static方法可以被子类继承,但是不能被子类重写(覆盖),但是可以被子类隐藏。(这里意思是说如果父类里有一个static方法,它的子类里如果没有对应的方法,那么当子类对象调用这个方法时就会使用父类中的方法。而如果子类中定义了相同的方法,则会调用子类的中定义的方法。唯一的不同就是,当子类对象上转型为父类对象时,不论子类中有没有定义这个静态方法,该对象都会使用父类中的静态方法。因此这里说静态方法可以被隐藏而不能被覆盖。这与子类隐藏父类中的成员变量是一样的。隐藏和覆盖的区别在于,子类对象转换成父类对象后,能够访问父类被隐藏的变量和方法,而不能访问父类被覆盖的方法)
4、构造方法也是不能被继承的(子类是通过隐藏的super()来调用父类的无参构造方法,来完成对父类的初始化),因此编译时也可以知道这个构造方法到底是属于哪个类。

//父类
public class Father {
    public static void main(String[] args) {
        Father a = new Son();
        a.test();
    }
    public static void test(){
        System.out.println("父类");
    }
}
//子类
public class Son extends Father{
    public static void test(){
        System.out.println("孩子");
    }
}

动态绑定

后期绑定:在运行时根据具体对象的类型进行绑定

动态绑定的过程
1、虚拟机提取调用对象的实际类型的方法表。既可能是本类的方法,也可能是子类的方法表。
2、虚拟机搜索定义调用调用方法的签名的类。此时,虚拟机已经知道应该调用哪个方法。
3、最后,虚拟机调用方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java动态绑定和静态绑定 的相关文章

  • Unity 如何实现音频播放后的回调

    using System using System Collections using System Collections Generic using UnityEngine public class soundManager MonoB
  • IDEA创建Maven项目报错- Error injecting constructor, java.lang.NoSuchMethodError: org.apache.maven.model】

    1 报错 今天下了最新版本的maven 在idea中配置好maven好 拉取依赖报错了 2 查看报错日志 报错如下 1 Error injecting constructor java lang NoSuchMethodError org
  • python代码编译反编译

    一 编译 自带模块py compile 可以把 py代码编译成pyc文件 py文件中导入使用 import py compile py compile compile r code01 py 在终端中运行 python m py compi
  • 常见问题记录

    执行数据迁移时报如下错误 sqlalchemy exc IntegrityError pymysql err IntegrityError 1215 Cannot add foreign key constraint 解决方案 创建外键的字
  • JavaMail 发送的邮件附件名乱码

    情景还原 同事收到系统发出的一封邮件 邮件里的附件名称本该是 模板 周汇报 2 docx却显示成了 UTF 8Q E3 80 90 UTF 8Q 2 docx 问题探究 第一反应是附件编码的问题 于是把 MimeMessageHelper
  • 静态链表

    代码来源 晴神 算法笔记 静态链表问题通用解题模板 定义静态链表 struct Node typename data int next XXX node size 使用静态链表时 结构体类型名和结构体变量名不要相同 初始化 XXX初始化为正
  • [Python人工智能] 三十二.Bert模型 (1)Keras-bert基本用法及预训练模型

    从本专栏开始 作者正式研究Python深度学习 神经网络及人工智能相关知识 前一篇文章结合文本挖掘介绍微博情感分类知识 包括数据预处理 机器学习和深度学习的情感分类 这篇文章将开启新的内容 Bert 首先介绍Keras bert库安装及基础
  • 新的RBAC:基于资源的权限管理(Resource-Based Access Control)

    新的RBAC 基于资源的权限管理 Resource Based Access Control 本文讨论以角色概念进行的权限管理策略及主要以基于角色的机制进行权限管理是远远不够的 同时将讨论一种更好的权限管理方式 What is a Role
  • python 模块和包

    一 模块 1 什么是模块 常见的场景 一个模块就是一个包含了python定义和声明的文件 文件名就是模块名字加上 py的后缀 但其实import加载的模块分为四个通用类别 1 使用python编写的代码 py文件 2 已被编译为共享库或DL
  • RocketMQ安装

    目录 1 安装配置jdk8 1 1将文件jdk 8u212 linux x64 tar gz上传到 root目录 1 2 解压缩jdk压缩文件 1 3 配置jdk环境变量 1 4验证jdk是否安装成功 2 安装RocketMQ 2 1下载r
  • nginx   client_body_buffer_size

    这里分享一个关于 nginx client body buffer size 参数的解决案例 描述 前端同事反馈 在发POST 请求带参数的时候 过Nginx 会报错 但是单台测试tomcat POST 很正常 看了下请求参数 好大一堆 的
  • [高级数据结构C++] 树状数组(求前缀和,区间和)

    算法竞赛 file author jUicE g2R qq 3406291309 彬 bin 必应 一个某双流一大学通信与信息专业大二在读 brief 一直在算法竞赛学习的路上 copyright 2023 9 COPYRIGHT 原创技术
  • vue项目实现鼠标移入显示表格,移出隐藏表格

    1 生成ul li列表 ul class ul list style margin bottom 10px li item planNm li ul 2 需要显示的表格 div style display none font size 14
  • mmdeploy快速上手

    mmdeploy快速上手 若要将使用 openmmlab 的框架 如mmdet mmcls 等训练的模型进行快速部署 同样来自 openmmlab 的 mmdeploy 无疑是最合适的选择 本文将简单地完成一个 Faster RCNN 模型
  • idea如何导入jar包

    通过添加Libraries的方式引入 1 首先在根目录下创建一个 libs 的目录 2 打开 File gt Project Structure 3 单击 Libraries gt gt Java gt 选择我们导入的项目主目录 点击OK
  • xxl-job远程命令执行漏洞复现

    目录 1 漏洞描述 2 靶场搭建 3 漏洞复现 反弹shell 1 漏洞描述 XXL JOB是一个分布式任务调度平台 其核心设计目标是开发迅速 学习简单 轻量级 易扩展 现已开放源代码并接入多家公司线上产品线 开箱即用 XXL JOB分为a
  • linux查看文件位置

    这本阿里P8撰写的算法笔记 再次推荐给大家 身边不少朋友学完这本书最后加入大厂 Github 疯传 史上最强悍 阿里大佬 LeetCode刷题手册 开放下载了 查找文件 在linux中 我经常碰到一个问题 就是如何找到某个文件 有时可能是找
  • OkHttp GET 和 POST 的使用

    1 OkHttp 介绍 Android 系统主要提供两种方式来进行 HTTP 通信 HttpURLConnection 和 HttpClient 但是由于 HttpClient 的 API 数量过多 从 Android 2 3 及以后版本中
  • QT MSVC中文编译出错error: C2001: 常量中有换行符

    QT上用MSVC去编译部分含有中文的字符串时会出现编译错误error C2001 常量中有换行符 但用MinGW就不会 需在后面加个正常的字符才能正常编译 但出现乱码了 其编码如下图 明显的看着编码不对 如果想都编译成功 那就需要在设置里把
  • Sqli-labs之Less-24(二次注入)

    Less 24 POST型基于存储的二次注入 随意输入 点击 Forgot your password 翻译 如果你忘记了密码 去黑掉它 点击 New User click here 注册用户 尝试注册一个用户 用户 test1 密码 te

随机推荐