您现在的位置是:首页 > 正文

java语言的动态性相关概念;动态绑定、动态连接、与虚方法

2024-02-01 03:41:16阅读 2

1.动态连接(链接)

java代码在进行javac编译的时候不会像c或者c++有“连接”这一步骤,而是虚拟机在加载Class文件的时候进行动态连接。也就是说在class文件中不会保存各个方法,字段最终在内存中的入口地址,也就无法被虚拟机直接使用。(摘自深入理解java虚拟机)
通俗的说就是就java在完成编译的时候方法字段在连接前不会分配内存。

2.运行期类加载机制

java虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成被虚拟机直接使用的java类型的过程叫做类加载机制。与c++这种在编译时需要进行连接的语言不同。这种策略给java带来了极高的扩展性。比如用户可以通过java预置的自定义类加载器,让某个本地的应用程序在运行时加载一个二进制流成为程序代码的一部分。

3.运行期异常与编译期报错

int main(void){
   int i[1][0][-1]; // gcc拒绝编译  size of array is negative
   return 0}
public void main (String[] args){
    int[][][] array = new int[1][0][-1];
}

报运行时异常(NegativeArraySizeException)

4.动态绑定(多态)

在运行时期根据具体对象的类型进行绑定。编译器在运行时此时依然不知道对象的类型,但方法调用机制能自己去调查,找到正确的方法主体。
1.虚拟机提取对象实际类型的方法表

2.虚拟机搜索方法签名

3.调用方法

多态简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,

5 .虚方法

5.1 非虚方法: (static)静态方法,(private)私有方法,实例构造器父类方法,final方法。
虚方法:java中的虚方法表存放着各个方法的实际入口地址,将在类加载的连接阶段进行初始化。

5.2 c++虚函数 虚函数源于c++中的类继承,是多态的一种。在c++中,一个基类的指针或者引用可以指向或者引用派生类的对象。同时,派生类可以重写基类中的成员函数。多态用虚函数来实现,结合动态绑定。

6.总结

  1. 动态连接主要和c/c++这种在编译期间就分配了内存的对比。java是在运行时候才分配;
  2. 有静态绑定和动态绑定;重载是静态绑定;多态是动态绑定;父类的指针通过虚方法表来找到子类对应方法
  3. C++中 当函数被virtual关键字修饰时,该函数被称为虚函数

网站文章

  • 配置一个加密的服务器

    配置一个加密的服务器

    一.添加一个ip地址 二.创建目录 命令:mkdir /tengbaiwan 检查 三.磁盘分区和格式化 1.在虚拟机关机情况下,添加一块新的磁盘 2.磁盘分区 注:磁盘可以分为主分区和扩展分区,而逻...

    2024-02-01 03:40:46
  • 代码方式配置和xml文件方式混合配置spring

    使用代码的配置方式和xml配置方式配置spring

    2024-02-01 03:40:38
  • ubuntu 安装 repo 记录

    安装步骤:1、根目录下创建bin文件夹mkdir ~/bin2、配置为临时环境变量(也可配置为永久的)PATH=~/bin:$PATH3、下载repogit clonehttps://gerrit-g...

    2024-02-01 03:40:31
  • exe获得命令行参数的办法

    exe获得命令行参数的办法第一种办法——通过__argc宏、__argv[i]第二种办法——MFC中办法 第一种办法——通过__argc宏、__argv[i] for(size_t i=0;i<...

    2024-02-01 03:40:00
  • 工业元宇宙->巨型新市场

    工业元宇宙->巨型新市场

    工业元宇宙->巨型新市场 李正海在清华大学新闻学院新媒体研究中心与南京江宁高新区管委会举办的工业元宇宙与工业互联网在线沙龙上的讲话元宇宙时代,要把人加进来大家好,我今天给大家分享的题目是《工业元宇宙到...

    2024-02-01 03:39:54
  • 微信浏览器移动端禁止图片放大图片效果

    解决第三方网页在微信浏览器中点击图片自动放大,因为微信Android客户端已经在底层支持img标签自动放大功能;传统方式:$(document).on(‘click’, ‘img’, e => {e.preventDefault();})这个方式可能会把所有的默认的属性都屏蔽了,典型的就是a标签不能跳转css方式:img{pointer-events: none;}这个会...

    2024-02-01 03:39:46
  • Spring-Spring Framework系统架构分析

    Spring-Spring Framework系统架构分析

    Spring Framework是Spring生态圈中最基础的项目,是其他项目的根基。Spring的架构版本目前稳定在Spring 4.X;

    2024-02-01 03:39:39
  • 计算机导论新发展方向,基于新工科的计算机导论课程教学改革研究

    计算机导论新发展方向,基于新工科的计算机导论课程教学改革研究

    王金环 焦纯[摘 要]本文针对计算机导论课程教学存在的问题从教学目标设计、教学进程设计、教具的灵活应用和教学验收方法等方面进行了探讨,以期为应用型人才的培养提供重要依据和参考。[关键字]新工科 计算机导论 教学改革 教学方法引 言计算机导论是计算机类的专业基础课程之一,是一门理论与实践相结合的课程。为了培养适应经济迅速发展的新型工科人才,我们应该转变教学观念,改革教学模式,重组知识结构...

    2024-02-01 03:39:08
  • VMware 安装银河麒麟V10系统和安装达梦数据库及基本操作

    VMware 安装银河麒麟V10系统和安装达梦数据库及基本操作

    银河麒麟V10系统和达梦数据库

    2024-02-01 03:39:01
  • 计算机网络信息的获取教学反思,《浏览因特网》教学反思

    《《浏览因特网》教学反思》由会员分享,可在线阅读,更多相关《《浏览因特网》教学反思(3页珍藏版)》请在人人文库网上搜索。1、浏览因特网教学反思一、 为什么选浏览因特网在选题之前,我在网络上搜索了大量的...

    2024-02-01 03:38:54