try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗

news/2024/11/5 17:26:21/文章来源:https://www.cnblogs.com/2324hh/p/18528398

 

finally 一定会执行,即使是 catch 中 return 了,catch 中的 return 会等 finally 中的代码执行完之后,才会执行。

 

 

下面提供了一段示例代码和运行结果。问题的核心在于当​​catch​​​块中有​​return​​​语句时,​​finally​​块是否还会被执行。

示例代码解析

public class Test2 {private static int test() {try {int ret = 1 / 0;System.out.println("try");return 0; // 这行不会执行,因为会发生除零异常} catch (Exception e) {System.out.println(e.getMessage());return 1; // 这里有return语句} finally {System.out.println("finally"); // 这里是finally块}}public static void main(String[] args) {System.out.println(test()); // 调用test方法并打印结果}
}

运行结果

/ by zero
finally
1

分析

  1. try块: 在try块中,由于执行了int ret = 1 / 0;这行代码,会导致除零异常(ArithmeticException),因此程序会跳转到对应的catch块处理异常。
  2. catch块: 异常被捕获后,System.out.println(e.getMessage());会输出错误信息“/ by zero”,然后执行return 1;,这意味着从catch块直接返回值1。
  3. finally块: 尽管catch块中有return语句,但finally块仍然会被执行。这是因为finally块总是会在trycatch块之后执行,无论是否有return语句。
  4. 返回值: 最终的返回值是1,因为在catch块中已经通过return 1;指定了返回值。

结论

即使​​catch​​块中有​​return​​语句,​​finally​​块也会被执行。这是Java语言的一个重要特性,确保了资源的正确清理和其他必要的操作能够在任何情况下都得到执行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/827226.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Synchronized用过吗,其原理是什么

synchronized 是由一对 monitorenter/monitorexit 指令实现的,monitor 对象是同步的基本实现单元。在 Java 6 之前,monitor 的实现完全是依靠操作系统内部的互斥锁,因为需要进行用户态到内核态的切换,所以同步操作是一个无差别的重量级操作,性能也很低。但在 Java 6 的时候…

算法与数据结构——基数排序

基数排序 基数排序(radix sort)的核心思想与计数排序一致,也通过统计个数来实现排序。计数排序适用于数据量n较大但数据范围m比较小的情况。假设我们需要对n=106个学号进行排序,而学号是一个8位数字,这意味着数据范围m=108非常大,使用计数排序需要分配大量内存空间,而基…

第二届全国高校软件测试开发教育峰会在韩山师范学院隆重举办!

10月26日-27日,由测试开发校企联合培养联盟主办、韩山师范学院承办、测吧(北京)科技有限公司及<火焰杯>软件测试开发大赛组委会协办的第二届全国高校软件测试开发教育峰会在韩山师范学院隆重举行。本次峰会汇聚了来自全国各大高校的教师及企业嘉宾,旨在共同探讨软件测…

如何使用nssm将asp.net core/.net6/.net8的webapi项目、mvc项目、控制台项目等注册为windows服务

nssm工具可以将asp.net Framework、asp.net core、net6、.net8的webapi项目、mvc项目、控制台项目、winform项、WPF项目等注册为windows服务。 nssm可以将所有windows可执行文件注册为windows服务。 下面,使用nssm将asp.net8的webapi项目注册为windows服务为例:【第一步】开发…

转 分布式执行计划

###sample 1 https://open.oceanbase.com/blog/1100217?_gl=1*10gldye*_ga*Mjc3Nzg0NTIwLjE3MzA3ODg3NDI.*_ga_T35KTM57DZ*MTczMDc5NDE2Ny4yLjEuMTczMDc5NTk5NC42MC4wLjA.本文介绍 OceanBase 的 SQL 执行类型。分布式数据库下数据分布在各个节点,SQL 很有可能会跨节点取数据。…

中公网校视频课件课程下载工具,如何在电脑端下载中公网校视频课件资料到本地?

一. 安装中公网校课程下载器 1.获取学无止下载器 https://www.xuewuzhi.cn/eoffcn_downloader 2.下载安装后,然后点击桌面快捷方式运行即可。 注意:杀毒软件可能会阻止外部exe文件运行,并将其当做成病毒,直接添加信任即可,本软件绝对没有木马病毒。 二. 使用说明 1.学无止…

后端整合 Swagger + Knife4j 接口文档

后端整合 Swagger + Knife4j 接口文档什么是接口文档?写接口信息的文档,每条接口包括:请求参数 响应参数错误码接口地址 接口名称 请求类型 请求格式 备注who 谁用?一般是后端或者负责人来提供,后端和前端都要使用 为什么需要接口文档?有个书面内容(背书或者归档),便于…

start-all.sh脚本启动Hadoop的NameNode、DataNode、ResourceManager和NodeManager失败

今天在做大数据实验时,在终端,start-all.sh脚本启动Hadoop的NameNode、DataNode、ResourceManager和NodeManager失败,出现下面的错误信息: [root@node1 hadoop]# ./sbin/start-all.shStarting namenodes on [node1]ERROR: Attempting to operate on hdfs namenode as rootE…

Dash 2.18.2版本更新:模式匹配回调性能大提升

本文示例代码已上传至我的Github仓库:https://github.com/CNFeffery/dash-master Gitee同步仓库地址:https://gitee.com/cnfeffery/dash-master大家好我是费老师,今天Dash发布了2.18.2版本更新,虽然只是一次小版本更新,但其中涉及到的一些内容还是非常重要的,今天的文章中…

华为云:弹性负载均衡健康检查异常

动态负载均衡健康检查异常 健康检查基本配置如下: 其中内网IP和默认业务端口可以在负载均衡服务器→后端服务器组中查看即实际上的监听对象为192.168.0.170:8889。 健康检查异常说明健康检查curl这两个监听未返回200,去网络控制台→访问控制:安全组→default→入方向规则,查…

合规监管新趋势!智能合同审查免费体验,提升法律行业合同管理效率

思通数科 思通数据 思通数科推出的智能合同审查系统为这些痛点提供了解决方案。借助大模型、OCR和信息抽取等先进技术,系统具备高效要素抽取、自动分类、合同比对和合同审查等功能。以下是该系统的主要功能及用户体验案例,展示了在法律行业中的实际应用效果。应用案例:法律行…