摘要:利用9个问题帮助记忆流程控制语句中的Java原理知识。

本文分享自华为云社区《流程控制语句知识点里的java原理》,作者:breakDraw 。

相信大家经常会遇到这种问题

可是这个知识点是为什么呢? 我继续以问题的形式来记忆这个问题中的原理。

Q: 什么是操作数栈
A:可以理解为jvm做计算时,需要一个临时的寄存器,把需要计算的数据或者传方法的参数放到栈中,然后做计算。

Q: 什么是栈帧?
A: 每个线程有一个自己的栈帧,然后运行到每个方法时,每个方法中都会可以理解为是摄影里的一帧。

Q: 栈帧里包含什么?
A:

  • 局部变量表
  • 操作数栈
  • 动态链接
  • 方法返回地址

Q: 栈帧的大小什么时候确定?
A:在编译程序代码的时候

Q: 什么是局部变量表?
A:每个线程所在栈帧都会有一个自己的局部变量表,里面存储方法中使用到的局部变量。

Q: 实例方法(就是某new出来的对象调用的某个方法)局部变量表的第一个变量是什么?
A:是this引用。
因此在实例方法(即非静态方法)中调用f()时, 实际上调用的是this.f(), 而这个this就来自局部变量表。

PS:

  • returnAddress类型是为字节码指令jsr、jsr_w和ret服务的,它指向了一条字节码指令的地址。
  • 局部变量表的容量以变量槽(Slot)为最小单位,32位虚拟机中一个Slot可以存放一个32位以内的数据类型(boolean、byte、char、short、int、float、reference和returnAddress八种)

Q:为什么java中局部变量没有默认初始?
A:我的理解,局部变量在局部变量表中,而局部变量表是运行时生成的, 因此没法在编译期去生成他的默认初始,所以必须通过赋值指令在运行时给他赋值。(没找到很好的解释,有更好理解的可以帮忙回答一下)

Q:某个方法中执行return a时, 操作数栈和局部变量表会如何变化?
A:a的值会被放到操作数栈的栈顶,后面取返回值时,就从这里取(即jvm总得知道返回值放哪,而return肯定是方法的最后一步操作,于是默认栈顶)

Q:在return a之后, 如果在finally操作又对a执行a=2+b, 操作数栈和局部变量表又会如何变化?
A:原先准备返回的值会被作为局部变量存起来, 接着为了做计算,会取出a和b放到操作数栈中做计算

而在finally计算结束后,之前存的返回值会被放回栈顶。

因此,finally里对返回变量的修改,无法修改真正的返回值。
除非在finally里再执行return操作,这时候就会更改返回值。

点击关注,第一时间了解华为云新鲜技术~

9个问题,带你掌握流程控制语句中的java原理相关推荐

  1. Java语言程序设计 上机实验2 掌握Java的基本语言成分和流程控制语句。 掌握Java中数组的使用,理解引用数据类型。 掌握String类的使用。...

      Java语言程序设计 上机实验2 实验目的: 掌握Java的基本语言成分和流程控制语句. 掌握Java中数组的使用,理解引用数据类型. 掌握String类的使用. 实验内容: 注:标(*)为选做内 ...

  2. java循环控制语句,简述Java流程控制语句中的三种循环控制语句,并描述下它们的区别。...

    简述Java流程控制语句中的三种循环控制语句,并描述下它们的区别. 答:for语句,构建确定循环次数的循环结构 while语句,通常构建不确定循环次数的循环结构 do-while语句,通常构建不确定循 ...

  3. java基础起步三-流程控制语句中的条件语句

    文章目录 流程控制语句结构: 1. 顺序结构 2. 分支结构 3. 循环结构 分支结构语法: 1. 单分支结构; 2. 双分支结构 3. 多分支条件语句: 选择结构 语法: 注意: 输入输出案例 练习 ...

  4. activiti5 流程文件中使用java 方法

    1.首先创建一个java类UserService.java,有一个方法 public String getUsers(){ return "123,456,789,147"; } ...

  5. (面经总结)一篇文章带你整理面试过程中关于Java 中多线程的创建方式的最全整理

    文章目录 一.Java线程的创建方式 二.继承Thread类 三.实现 Runnable 接口 四.通过ExecutorService和`Callable`实现有返回值的线程 五.基于线程池 六.面试 ...

  6. PHP流程控制语句例题,第四堂、php流程控制语句

    php流程控制语句 条件控制语句和循环控制语句是两种基本的语法结构.它们都是用来控制程序执行流程的,也是构成程序的主要语法基础. 程序的3种控制结构 条件控制语句 循环控制语句 跳转语句 包含语句 1 ...

  7. T-SQL查询进阶--流程控制语句

    和其他高级语言一样,T-SQL中也有用于控制流程的语句.T-SQL中的流程控制语句进一步扩展了T-SQL的力量--使得大部分业务逻辑可以在数据库层面进行.但很多人对T-SQL中的流程控制语句并没有系统 ...

  8. Java基础篇(03):流程控制语句,和算法应用

    本文源码:GitHub·点这里 || GitEE·点这里 一.分支语句 流程控制语句对任何一门编程语言都是非常重要的,Java中基于流程控制程序执行的不同步骤和代码块. 1.IF条件 IF条件语句会根 ...

  9. 运算符,流程控制语句

    运算符 ​ 算术.赋值.关系.逻辑.三目(三元)运算符 if & if-else 键盘输入 switch 运算符 运算符对数据的处理. 运算符有: 算术运算,赋值运算,关系运算,逻辑运算,三目 ...

最新文章

  1. 英伟达的雄心:成为AI时代的计算平台
  2. 数据仓库中宽表的设计原则_实际项目中交互设计原则的运用
  3. redhat-problem to be research
  4. Web Service 开发工具 gSOAP 简介
  5. springboot 配置双mysql数据库
  6. [汇编] 002基础知识-CPU和寄存器
  7. java中bash应用_在bash脚本中查找java应用程序的进程ID(以查看目标应用程序是否已在运行)...
  8. java 线程的理解_Java多线程基础理解
  9. firebug的调试,console
  10. fastdfs原理简析
  11. 数学模型——数学与人类文明的桥梁
  12. office word doc中无法输入英文双引号
  13. leetcode-腾讯精选50题-02
  14. 抖音小店无货源,怎么操作可以出单?资深电商人在线分享
  15. Java命令简易入门-3:javac与java命令之(java与jar)
  16. comsol函数的使用(入门级教程)
  17. PHP文字间距怎么调,在html中怎么设置文字间距
  18. Airtest+Poco多设备并发自动化游戏测试框架(遇到的问题)
  19. 卡塞格林光学系统_卡塞格林系统光学装调技术研究
  20. 软件测试面试题:只许称一次

热门文章

  1. 让电脑说话代码_让您的代码为您说话
  2. (11)Node.js 核心模块fs – 同步函数( synchronization )
  3. 面向对象编程起步——神来之笔
  4. 定制Bootstrap
  5. es6 实例:使用Proxy实现观察者模式
  6. ECMAScript 语法提案的批准流程
  7. Python笔记(6) 数字
  8. 河南理工大学计算机学院课表,河南理工大学实验课课程表.doc
  9. java密码模块怎么做_密码模块设计
  10. redis循环键_Redis的并发控制