当前位置: 首页 > news >正文

【JVM】JVM栈帧中的动态链接 与 Java的面向对象特性--多态

栈帧

每一次方法调用都会有一个对应的栈帧被压入栈(虚拟机栈)中,每一个方法调用结束后,都会有一个栈帧被弹出。

每个栈帧中包括:局部变量表、操作数栈、动态链接、方法返回地址。

在这里插入图片描述
JavaGuide:Java内存区域详解(重点)

动态链接

动态链接:指向运行时常量池中该栈帧所属方法的引用。在这里插入图片描述在这里插入图片描述

多态

多态允许不同类的对象对同一消息做出响应,但表现出不同的行为(即方法的多样性)。

多态其实是一种能力——同一个行为具有不同的表现形式;换句话说就是,执行一段代码,Java 在运行时能根据对象类型的不同产生不同的结果。

多态的前置条件有三个:

  • 子类继承父类
  • 子类重写父类的方法
  • 父类引用指向子类的对象

多态的目的是为了提高代码的灵活性和可扩展性,使得代码更容易维护和扩展。比如说动态绑定,允许在程序在运行时再确定调用的是子类还是父类的方法。

现在有一个父类 Wanger,一个子类 Wangxiaoer,都有一个 write 方法。引用 wanger 的类型是父类的 Wanger,那在执行 wanger.write() 时,究竟该调用父类 Wanger 的 write() 方法,还是子类 Wangxiaoer 的 write() 方法呢?

答案是在运行时根据对象的类型进行后期绑定,编译器在编译阶段并不知道对象的类型,但是 Java 的方法调用机制能找到正确的方法体,然后执行,得到正确的结果。

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • SOMEIP_ETS_098: SD_ClientService_subscribe_without_method_call
  • [数据集][目标检测]轮胎缺陷检测数据集VOC+YOLO格式2154张4类别
  • go基础知识归纳总结
  • 【ARM compiler】生成ELF文件中包含了那些内容
  • Mertens定理(级数乘法)
  • 电脑安装Winserver2016无法安装网卡驱动(解决办法)
  • Android 12 SystemUI下拉状态栏禁止QuickQSPanel展开
  • LeetCode:977. 有序数组的平方 双指针 时间复杂度O(n)
  • 利用数据分析提升SEO排名的7种方法
  • C++ vectorOJ练习题
  • 【C/C++】“秒懂”学C/C++不可错过的“经典编程题” — 日期类的经典运用 (含题链接)
  • Git-下载的zip包项目重新指向github项目地址
  • Request Response
  • VSCode学习笔记
  • 802.11 中 scrambler的matlab仿真
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • CSS 专业技巧
  • FineReport中如何实现自动滚屏效果
  • IDEA 插件开发入门教程
  • JavaScript的使用你知道几种?(上)
  • JavaScript服务器推送技术之 WebSocket
  • JAVA并发编程--1.基础概念
  • Java深入 - 深入理解Java集合
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 使用 Xcode 的 Target 区分开发和生产环境
  • 用jQuery怎么做到前后端分离
  • puppet连载22:define用法
  • ​VRRP 虚拟路由冗余协议(华为)
  • #includecmath
  • #Linux(帮助手册)
  • (1)Android开发优化---------UI优化
  • (Python第六天)文件处理
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (差分)胡桃爱原石
  • (第30天)二叉树阶段总结
  • (过滤器)Filter和(监听器)listener
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • (转)VC++中ondraw在什么时候调用的
  • .md即markdown文件的基本常用编写语法
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本
  • .net流程开发平台的一些难点(1)
  • .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
  • /etc/skel 目录作用
  • /etc/sudoer文件配置简析
  • @RestController注解的使用
  • [ Linux ] git工具的基本使用(仓库的构建,提交)
  • [ Socket学习 ] 第一章:网络基础知识
  • [12] 使用 CUDA 进行图像处理