关键字:jvm try catch finally return、指令

  1. finally相当于在所有方法返回之前执行一次
  2. finally中含有return其中finally中return会覆盖try和catch中的return
  3. finally中不含return时,会先将try或catch中的返回值储存在局部变量表中,最后执行返回是加载到操作数栈返回
public class FinallyReturnBean {

    public int sayGoodBye(int divide){
int c = 0;
try {
c = 1000/divide;
return c;
}catch (Exception e){
c = 500;
return c;
}finally {
c =300;
// return c;//#1 注释return c; #2 不注释 return c;
}
} public static void main(String[] args) {
System.out.println(new FinallyReturnBean().sayGoodBye( 0));
System.out.println(new FinallyReturnBean().sayGoodBye( 1));
} // #1 注释return c; 500;1000
// public class com.lsl.common.jvm.bean.FinallyReturnBean {
// public com.lsl.common.jvm.bean.FinallyReturnBean();
// Code:
// 0: aload_0
// 1: invokespecial #1 // Method java/lang/Object."<init>":()V
// 4: return // public int sayGoodBye(int);
// Code:
// 0: iconst_0
// 1: istore_2
// 2: sipush 1000
// 5: iload_1
// 6: idiv
// 7: istore_2
// 8: iload_2
// 9: istore_3 --slot3
// 10: sipush 300
// 13: istore_2
// 14: iload_3 --slot3
// 15: ireturn --1000
// 16: astore_3
// 17: sipush 500
// 20: istore_2
// 21: iload_2
// 22: istore 4
// 24: sipush 300
// 27: istore_2
// 28: iload 4
// 30: ireturn --
// 31: astore 5
// 33: sipush 300
// 36: istore_2
// 37: aload 5
// 39: athrow
// Exception table:
// from to target type
// 2 10 16 Class java/lang/Exception
// 2 10 31 any
// 16 24 31 any
// 31 33 31 any
// } // #2 不注释 return c; 300;300 try return失效
// public class com.lsl.common.jvm.bean.FinallyReturnBean {
// public com.lsl.common.jvm.bean.FinallyReturnBean();
// Code:
// 0: aload_0
// 1: invokespecial #1 // Method java/lang/Object."<init>":()V
// 4: return
//
// public int sayGoodBye(int);
// Code:
// 0: iconst_0
// 1: istore_2
// 2: sipush 1000
// 5: iload_1
// 6: idiv
// 7: istore_2
// 8: iload_2
// 9: istore_3
// 10: sipush 300
// 13: istore_2
// 14: iload_2
// 15: ireturn --
// 16: astore_3
// 17: sipush 500
// 20: istore_2
// 21: iload_2
// 22: istore 4
// 24: sipush 300
// 27: istore_2
// 28: iload_2
// 29: ireturn --
// 30: astore 5
// 32: sipush 300
// 35: istore_2
// 36: iload_2
// 37: ireturn --
// Exception table:
// from to target type
// 2 10 16 Class java/lang/Exception
// 2 10 30 any
// 16 24 30 any
// 30 32 30 any
// } }

JVM关键字try、catch、finally、return执行过程的更多相关文章

  1. 异常 try catch finally return 执行关系 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  2. java try catch finally return执行

    public static int testBasic(){ int i = 1; try{ i++; System.out.println("try block, i = "+i ...

  3. js中的this关键字,setTimeout(),setInterval()的执行过程

    var test1 = { name: 'windseek1', showname: function () { console.log(this.name); } } var test2 = { n ...

  4. C++ 异常处理执行过程

    看<clean code>时,又遇到异常处理的例程. 看不明白是因为我一直都将异常处理束之高阁. 今天晚上下决心去找资料看看,看完之后觉得以前是把它想得太难,其实非常简单. 希望以后遇到问 ...

  5. Java基础知识强化之IO流笔记06:有return的情况下try catch finally的执行顺序

    1. 给出结论: (1)不管有木有出现异常,finally块中代码都会执行:(2)当try和catch中有return时,finally仍然会执行:(3)finally是在return后面的表达式运算 ...

  6. 【转】C# 异常处理 throw和throw ex的区别 try catch finally的执行顺序(return)

    [转]throw和throw ex的区别 之前,在使用异常捕获语句try...catch...throw语句时,一直没太留意几种用法的区别,前几天调试程序时无意中了解到几种使用方法是有区别的,网上一查 ...

  7. jvm | 基于栈的解释器执行过程

    一段简单的算术代码: public class Demo { public static void main(String[] args) { int a = 1; int b = 2; int c ...

  8. 小师妹学JVM之:JVM的架构和执行过程

    目录 简介 JVM是一种标准 java程序的执行顺序 JVM的架构 类加载系统 运行时数据区域 执行引擎 总结 简介 JVM也叫Java Virtual Machine,它是java程序运行的基础,负 ...

  9. 高程(4):执行环境、作用域、上下文执行过程、垃圾收集、try...catch...

    高程三 4.2.4.3 一.执行环境 1.全局执行环境是最外层的执行环境. 2.每个函数都有自己的执行环境,执行函数时,函数环境就会被推入一个当前环境栈中,执行完毕,栈将其环境弹出,把控制器返回给之前 ...

随机推荐

  1. 5.29 省选模拟赛 树的染色 dp 最优性优化

    LINK:树的染色 考场上以为这道题要爆蛋了 没想到 推出正解来了. 反正是先写了爆搜的 爆搜最近越写越熟练了 容易想到dp 容易设出状态 f[i][j]表示以i为根的子树内白色的值为j此时黑色的值怎 ...

  2. CF R631 div2 1330 E Drazil Likes Heap

    LINK:Drazil Likes Heap 那天打CF的时候 开场A读不懂题 B码了30min才过(当时我怀疑B我写的过于繁琐了. C比B简单多了 随便yy了一个构造发现是对的.D也超级简单 dp了 ...

  3. Maven执行Reimport命令报错:See logs for details

    Idea版本:2018.1.3 maven版本:3.6.2 Idea配置了本地下载的maven之后,不管是直接执行maven的Reimport命令,还是使用idea的Reimport按钮,都会报这个错 ...

  4. 如何在 Android 安卓手机上运行 Node.js 应用 | 如何在安卓手机配置node开发环境

    最近在学习js,由于没法随身携带笔记本电脑,在手机翻阅<JavaScript高级程序设计>时,时常想调试一下书中的代码.于是就有了,能否在手机上配置一个js开发环境.考虑到手机上的Chro ...

  5. Android 进度条(ProgressBar)和拖动条(Seekbar)补充“自定义组件”(总结)

    这周结束了,我也码了一周的字,感觉还是很有种脚踏实地的感觉的,有时间就可以看看自己的总结再查漏补缺,一步一个脚印,做出自己最理想的项目. 今天我们讲两点: 1.ProgressBar: 其实前面也稍微 ...

  6. Python自动化爬取App数据

    基本环境配置 版本:Python3 系统:Windows 需要安装: 1.JDK - Download JDK,Appium要求用户必须配置JAVA环境, 否则启动Seesion报错. 很多人学习py ...

  7. C#LeetCode刷题之#48-旋转图像(Rotate Image)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3668 访问. 给定一个 n × n 的二维矩阵表示一个图像. 将 ...

  8. C#LeetCode刷题-脑筋急转弯

    脑筋急转弯篇 # 题名 刷题 通过率 难度 292 Nim游戏   62.5% 简单 319 灯泡开关   31.8% 中等 777 在LR字符串中交换相邻字符   21.9% 中等

  9. 思维导图概览SpringCloud

    @ 目录 1.什么是微服务 1.1.架构演进 1.2.微服务架构 1.3.微服务解决方案 2.SpringCloud概览 2.1.什么是SpringCloud 2.1.SpringCloud主要组件 ...

  10. Oracle数据泵导出使用并行参数,单个表能否真正的并行?

    对于Oracle 数据泵expdp,impdp是一种逻辑导出导入迁移数据的一个工具,是服务端的工具,常见于DBA人员使用,用于数据迁移.从A库迁移至B库,或者从A用户迁移至B用户等. 那么有个疑问? ...