public class TestTryCatch { public static void main(String[] args) { TestTryCatch test = new TestTryCatch(); System.out.println(test.fun()); System.out.println(test.fun2()); } public int fun() { int i = 10; try { return i; } finally { i = 20; } } public StringBuilder fun2() { StringBuilder s = new StringBuilder("Hello"); try { //doing something s.append("Word"); return s; } catch (Exception e) { return s; } finally { s.append("finally"); } } }
javap -c TestTryCatch.class 之后,就可以看见了
Compiled from "TestTryCatch.java" public class cn.com.flamezealot.base.jvm.trycatch.TestTryCatch { public cn.com.flamezealot.base.jvm.trycatch.TestTryCatch(); Code: 0: aload_0 1: invokespecial #8 // Method java/lang/Object."<init>":()V 4: return public static void main(java.lang.String[]); Code: 0: new #1 // class cn/com/flamezealot/base/jvm/trycatch/TestTryCatch 3: dup 4: invokespecial #16 // Method "<init>":()V 7: astore_1 8: getstatic #17 // Field java/lang/System.out:Ljava/io/PrintStream; 11: aload_1 12: invokevirtual #23 // Method fun:()I 15: invokevirtual #27 // Method java/io/PrintStream.println:(I)V 18: getstatic #17 // Field java/lang/System.out:Ljava/io/PrintStream; 21: aload_1 22: invokevirtual #33 // Method fun2:()Ljava/lang/StringBuilder; 25: invokevirtual #37 // Method java/io/PrintStream.println:(Ljava/lang/Object;)V 28: return public int fun(); Code: 0: bipush 10 10入栈顶 2: istore_1 栈顶数据保存到局部变量数组第2个位置 3: iload_1 取出第2个局部变量入栈顶 4: istore 4 栈顶数据保存到第5个局部变量 6: bipush 20 20入栈顶 8: istore_1 栈顶数据保存到第2个局部变量 9: iload 4 第5个局部变量入栈顶 11: ireturn 返回 12: astore_2 栈顶数据放到局部变量数组第3个位置 13: iload_1 第2个局部变量的值放入栈顶 14: istore 4 栈顶数据保存到第5个局部变量 16: bipush 20 20入栈顶 18: istore_1 保存到第2个局部变量 19: iload 4 第5个局部变量值入栈顶 21: ireturn 返回 22: astore_3 栈顶数据放到局部变量数组第4个位置 23: bipush 20 20入栈顶 25: istore_1 保存到第2个局部变量 26: aload_3 局部变量数组第4个位置数据入栈顶 27: athrow 将栈顶的数值作为异常或错误抛出 Exception table: from to target type 3 6 12 Class java/lang/Exception 3 6 22 any 12 16 22 any public java.lang.StringBuilder fun2(); Code: 0: new #52 // class java/lang/StringBuilder 3: dup 复制一份对象引用,因为接下来要先初始化,再保存到变量,所以这里复制了一份 4: ldc #54 // String Hello 6: invokespecial #56 // Method java/lang/StringBuilder."<init>":(Ljava/lang/String;)V 类初始化会弹出一个引用 9: astore_1 另一个引用存入局部变量表2号位置 10: aload_1 11: ldc #59 // String Word 13: invokevirtual #61 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; 16: pop 这里返回值没有赋给任何变量,所以pop出栈 17: aload_1 18: astore 4 20: aload_1 21: ldc #65 // String finally 23: invokevirtual #61 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; 26: pop 27: aload 4 sotre、load的都是引用 29: areturn 30: astore_2 31: aload_1 32: astore 4 34: aload_1 35: ldc #65 // String finally 37: invokevirtual #61 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; 40: pop 41: aload 4 43: areturn 每次return前都会执行fianlly里的方法 44: astore_3 45: aload_1 46: ldc #65 // String finally 48: invokevirtual #61 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; 51: pop 52: aload_3 53: athrow 异常处理前也会执行finally里的方法 Exception table: from to target type 10 20 30 Class java/lang/Exception 10 20 44 any 30 34 44 any }
jvm的指令集说明可以看这里
相关推荐
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
西门子224XP十显控触摸屏下的螺杆式空压机工频运行控制策略及程序注释解析,螺杆式空压机工频运行,变频机上用不了!!!使用西门子224xp 十显控触摸屏,程序有注释,可直接用于工程 ,核心关键词:螺杆式空压机;工频运行;变频机;西门子224xp;十显控触摸屏;程序注释;工程使用。,西门子224XP空压机控制程序工频变频切换方案
# 基于Arduino的Tellarium天文模拟系统 ## 项目简介 Tellarium是一个基于Arduino平台的天文模拟系统,旨在通过步进电机驱动行星模型,模拟行星的轨道运动。该项目通过串行通信接收用户指令,并使用DCF77库处理时间信号,以确保行星的运动与真实世界的时间同步。 ## 项目的主要特性和功能 1. 步进电机控制精确控制步进电机,实现行星模型的平滑运动。 2. 串行通信通过串行端口接收用户指令,如设置行星速度、启动或停止电机。 3. DCF77时间信号接收使用DCF77库接收时间信号,确保行星运动与真实时间同步。 4. 日志和调试提供日志输出和调试LED闪烁功能,便于开发者进行调试和问题排查。 5. 时间管理包括获取和设置时间、处理时间字符串等功能,确保系统时间的准确性。 ## 安装使用步骤 1. 硬件准备确保所有必要的硬件已正确连接,包括步进电机、磁铁传感器、Arduino板等。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
内容概要:文章介绍了针对COVID-19的药物再利用的创新方法,这种方法融合了基于文献的知识(LitCovid和CORD-19数据集)及先进的知识图谱补全技术。具体采用了基于神经网络的TransE、RotatE等多种算法预测药物再利用的潜力,并通过开放和封闭的发现模式为预测结果提供合理的机制解释,包括发现模式、准确性分类及定性评估等手段,增强了方法的实用性。研究表明,TransE表现最优,并成功预测并验证了一系列药物作为COVID-19的治疗候选人选。此外,方法不仅适用于COVID-19,还具备应用于其他疾病药物再利用及其他临床问题解决的潜力。此研究为快速高效地推进药物再利用提供了一个新的计算框架。 适合人群:生物医学科研人员,从事药品再利用、人工智能药物筛选的专业研究人员,对生物信息数据分析和处理感兴趣的学者或技术人员。 使用场景及目标:① 利用计算模型预测药物能否被重新应用于新的适应症,尤其是在面对突发公共卫生事件时加快新药物的研发进程。② 对现有药物进行再评价,以发现更广泛、安全、有效的治疗用途,为临床治疗提供依据和理论指导。③ 探讨通过自动化手段发掘药物作用机理的技术路径。 其他说明:作者团队来自多个国家和地区,研究获得了多项国家级基金支持,论文详尽描述了实验细节,并附上了全部代码和数据资源供后续拓展和重复研究使用。
QT 串口源码 串口实例 QT 串口助手代码 (2),含有完整的代码
2025年最新酒店客房部经理考试题答案.docx
# 基于Arduino的陶瓷加热器控制系统 ## 项目简介 这是一个基于Arduino的陶瓷加热器控制系统项目,旨在实现对陶瓷加热器的精确控制,适用于实验室、工业生产等需要精确控温的场合。 ## 项目的主要特性和功能 陶瓷加热器控制通过Arduino板控制陶瓷加热器的开关。 温度获取与转换采用ADC值获取温度,并通过查找表转换为实际温度。 目标温度设置允许用户设置目标温度。 错误检测与处理检测加热器的错误状态,如温度过高或短路等。 调试模式提供调试功能,方便开发者调试和测试。 ## 安装使用步骤 1. 下载并解压项目源码文件。 2. 将解压后的文件复制到Arduino的sketchbook目录中。 3. 连接陶瓷加热器到Arduino板上的指定引脚。 4. 使用USB线连接Arduino板到计算机。 5. 在Arduino IDE中打开项目文件,选择正确的Arduino板型号和端口。 6. 上传代码到Arduino板。
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
CatBoost-shap集成模型:分类任务的解释与可视化Python代码实现,自带数据集,即插即用,全部图形直观展现,CatBoost-shap集成模型用于分类任务,对模型和变量用shap进行解释 Python 代码,自带数据集可以直接运行 所有图所见即所得 ,核心关键词:CatBoost-shap; 分类任务; 模型解释; 变量解释; Python代码; 自带数据集; 直接运行; 图形化结果。,"CatBoost模型SHAP解释器:分类任务图解"
项目均经过测试,可正常运行! 环境说明: 开发语言:java JDK版本:jdk1.8 框架:springboot 数据库:mysql 5.7/8 数据库工具:navicat 开发软件:eclipse/idea
基于西门子S7-1200 PLC与Wincc组态技术的智能路口交通指挥系统解决方案。,No.698 西门子S7-1200 和Wincc组态基于PLC的路口交通指挥系统 ,No.698; 西门子S7-1200; Wincc组态; PLC; 路口交通指挥系统; 交通控制系统。,基于PLC与Wincc组态的西门子S7-1200交通指挥系统
西门子S7-200 PLC控制的灯泡安装工作站系统设计:高效、智能的自动化解决方案,No.662 基于西门子S7-200 PLC的灯泡安装工作站的控制系统设计 ,基于西门子S7-200 PLC; 灯泡安装工作站; 控制系统设计,西门子S7-200 PLC控制灯泡安装站设计 No.662
PHP从入门到精通课程资料+pdf
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
LBM格子玻尔兹曼方法在Matlab中模拟3D气泡上升多相流的应用研究,lbm格子玻尔兹曼方法模拟3D气泡上升多相流 matlab ,LBM;格子玻尔兹曼方法;3D气泡上升;多相流模拟;Matlab,LBM格子玻尔兹曼模拟3D气泡多相流上升过程 Matlab实现
SQL Server 从入门到精通-pdf
"混合储能功率共享系统:基于滑动平均与多通道FFT的功率分配及模糊控制SOC管理策略",混合储能功率共享系统 光伏发出的功率与负载消耗功率的差值即混合储能的功率,将混合储能功率通过滑动平均后剩下的功率差值通过多通道FFT进行二次划分;二次划分得到的低频功率分量与之前的滑动平均得到的成分一起分给蓄电池进行平抑,最后剩下的高频部分交给超级电容进行平抑 soc通过模糊控制进行管理 ,混合储能;功率共享;滑动平均;多通道FFT;低频功率;soc管理;超级电容;蓄电池平抑,混合储能功率管理系统的设计与优化
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
ollama