从 Java 中的 finally 块返回

2023-12-22

最近我很惊讶地发现Java 中的finally 块中可以有return 语句。

似乎很多人都认为这样做是一件坏事,如“不要在finally子句中返回 https://web.archive.org/web/20070922061412/http://weblogs.java.net/blog/staufferjames/archive/2007/06/_dont_return_in.html'。再深入一点,我还发现了'Java的返回并不总是 https://web.archive.org/web/20190528011825/http://www.cs.arizona.edu/projects/sumatra/hallofshame/' 它显示了finally块中其他类型的流量控制的一些非常可怕的例子。

所以,我的问题是,谁能给我一个例子,其中finally块中的return语句(或其他流程控制)会产生更好/更可读的代码?


几年前我很难找到由此引起的错误。代码是这样的:

Object problemMethod() {
    Object rtn = null;
    try {
        rtn = somethingThatThrewAnException();
    }
    finally {
        doSomeCleanup();
        return rtn;
    }
}

发生的情况是在其他代码中引发了异常。它被捕获、记录并重新扔进somethingThatThrewAnException()方法。但异常并没有传播过去problemMethod()。经过很长时间的研究,我们终于找到了 return 方法。 finally 块中的 return 方法基本上阻止了 try 块中发生的异常向上传播,即使它没有被捕获。

正如其他人所说,虽然根据 Java 规范从 finally 块返回是合法的,但这是一件坏事,不应该这样做。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 Java 中的 finally 块返回 的相关文章

  • 将比较器对象存储在数组中

    我为我的对象定义了 4 个比较器 如下所示 public static Comparator
  • Java Arraylist of object 按日期从数组列表中删除元素

    这是我的数组列表 ArrayList
  • Spring Batch如何作为Reader读取多个表(查询)并将其写入平面文件写入

    在我的项目中 我读取了具有不同查询的多个表 并将这些结果集合并到平面文件中 我该如何实现这一目标 我的意思是 JdbcReader 直接采用 1 个选择查询 我如何自定义它 如果 JdbcCursorItemReader 不能满足您的需求
  • JPA 实体中的方法是否允许抛出异常?

    我尝试创建的 Entity 有问题 当尝试使用 OpenJPA 实现在 Eclipse 中测试类时出现问题 我有not尝试过其他人 所以不确定它是否适用于他们 我的测试用例非常简单 因为它创建一个 EntityManagerFactory
  • mvn dependency:analyze 结果不正确

    我一直在寻找一种工具 它能够向您显示未使用的依赖项 我很快就偶然发现了 Maven 命令mvn dependency analyze 这样做的问题是 它经常检测到 未使用的 依赖项 如果缺失 这些依赖项就会导致构建失败 这是优化项目的示例
  • 使用 ScheduledExecutorService 安排每月任务

    我想在该月的某一天的特定时间安排一项任务 每次运行之间的间隔可以设置在 1 到 12 个月之间 在java中 可以使用ScheduledExecutorService以固定的时间间隔调度任务 既然一个月的天数不固定 那么如何实现呢 提前致谢
  • lombok - 多个镜头中的 @Builder 模式

    I use Builder of 龙目岛项目 https github com rzwitserloot lombok 所以考虑我有这个例子 Builder public class Client private Getter Setter
  • C# 中的 Culture 相当于 Java 中的 Locale 吗?

    C 使用文化的概念 这在操作上与 Java 中的 Locale 类似吗 或者底层概念是否存在显着差异 从文化而不是语言环境的角度进行工作是一种寻找正确抽象层次的尝试 从以类似方式做事的人群的角度来考虑事物 而不是谈论地理区域和语言 并有点疯
  • 如何在 Android 中将 EditText 绘制到画布上?

    我想画画 EditText username new EditText context 到我画布上的特定位置 protected void onDraw Canvas canvas 是否可以在基础上画出x y在我的 Java 文件中协调而不
  • 如何用java对jpg进行像素化?

    我正在尝试使用 Java 6 对 JPEG 进行像素化 但运气不佳 它需要使用 Java 而不是像 Photoshop 这样的图像处理程序 并且它需要看起来像老派 像这样 有谁能够帮助我 使用java awt image javadoc h
  • 按位非运算符

    为什么要按位运算 0 打印 1 在二进制中 不是0应该是1 为什么 你实际上很接近 在二进制中 不是0应该是1 是的 当我们谈论一位时 这是绝对正确的 然而 一个int其值为0的实际上是32位全零 将所有 32 个 0 反转为 32 个 1
  • 让 Java 与 Windows 10 Ubuntu 一起使用

    我安装了 Windows 10 周年更新 以便可以在 Windows 上的 Ubuntu 上尝试 Bash 看如何安装 http www howtogeek com 249966 how to install and use the lin
  • 从外部 clojar 导入/使用资源

    我想做的是将一个大文件 MIDI 声音字体 打包到一个独立的 Maven repo clojar 中 然后能够以编程方式将其拉下来并从单独的项目中使用它 事实证明 这个看似简单的任务比我想象的要复杂 理想的情况是 如果有一种方法可以直接访问
  • 用java解密AES加密文件

    我有一个使用 AES 使用 java 应用程序加密的文件 我还有一个加密的密钥文件 但我不明白如何使用密钥来解密文件 大多数教程和示例都会在一个地方创建临时随机密钥 加密文件和解密 所以 问题是如何指定解密时必须使用的密钥 EDIT 我发现
  • 从 Java 调用 Python 代码时出现问题(不使用 jython)

    我发现这是从 java 运行 使用 exec 方法 python 脚本的方法之一 我在 python 文件中有一个简单的打印语句 但是 我的程序在运行时什么也没做 它既不打印Python文件中编写的语句 也不抛出异常 程序什么都不做就终止了
  • SOAP Web 服务中的用户身份验证

    我提出了一个关于JAX WS 身份验证和授权 如何 https stackoverflow com questions 5314782 jax ws authentication and authorization how to 讨论了安全
  • 用于将字符串与通配符模式进行匹配的递归函数

    所以我一整天都在试图解决这个作业 只是无法完成 以下函数接受 2 个字符串 第二个 不是第一个 可能包含 的 星号 An 是字符串的替换 空 1个字符或更多 它可以出现 仅在s2中 一次 两次 更多或根本不出现 它不能与另一个相邻 ab c
  • Spring Boot 健康执行器 - 什么时候上线?

    我找不到任何有关 Springs Health Actuator 何时返回 UP 状态的文档 你能依靠一切吗 Components正在初始化 会不会 Controller准备好满足请求了吗 为了测试应用程序上下文是否已加载 您可以执行此自定
  • 如何使用自定义转换器访问 jOOQ 生成的例程字段作为值?

    我在访问生成例程的字段时遇到问题PL pgSQL 用户定义函数 返回JSON 数据类型结果 已经提到this https stackoverflow com q 62535195 6805866问题 这是我的结果get all orders
  • 当我必须在 Netty4 编码器中调用 ByteBuf.retain() 时?

    我正在编写一个以 NUL 终止 JSON 消息的编码器 以便在消息碎片的情况下可以对其进行解码 我找到了这个样本 gt click https github com netty netty blob master codec src mai

随机推荐

  • 修复 shell 脚本以增加 semversion [重复]

    这个问题在这里已经有答案了 我从未使用过 shell bash 但在脚本中发现了一些错误 我用它来增加版本 脚本工作正常 直到这种情况 version 1 27 9 echo version awk F v OFS NF 1 print N
  • Java 和 Clojure 与 Leiningen

    是否可以在使用 leiningen 的项目中轻松管理和编译本机 Java 类以及 Clojure 我的工作水平相当低 使用 netty nio 并且认为一些管道类实际上在构建代码和性能方面更容易作为原始 java 进行处理 从 Leinin
  • 控制器可以将接口实例作为参数吗? ASP.NET MVC

    ASP NET 控制器操作方法可以将接口作为参数之一吗 我想要这样的东西 class MyController HttpPost public ActionResult Action IMyModel model 是否可以 显然 我必须告诉
  • MonitorFilter::警告:监视器过滤器必须是链中的第一个过滤器

    Tomcat从8 0 5升级到8 0 9 0后 从浏览器访问页面时 Tomcat服务器在服务器终端上记录以下警告 MonitorFilter WARNING the monitor filter must be the first filt
  • C++ 上的 SendInput 不考虑 Ctrl 和 Shift

    I m trying to send a CTRL SHIFT END key stroke to a control in a C application written with Embarcadero I m using the co
  • Spring Data r2dbc 和分页

    我正在使用新的 spring data r2dbc 模块 并且我能够使用 ReactiveCrudRepository 提取数据 现在我需要引入分页 但我无法做到这一点 我尝试过这个 public interface TestReposit
  • Vim:在更改和重新加载文件后维护文件的历史记录

    如果我在 Vim 中编辑文件 那么某些外部程序会更改该文件 Vim 告诉我 W11 Warning File test erl has changed since editing started See help W11 for more
  • 如何升级sqlite数据库文件

    我正在做一个使用资产文件夹中的 sqlite db 文件的应用程序 我的应用程序中有一个屏幕 其中有一个按钮 检查更新 客户给了我一个 URL 链接来更新 db 文件 它提供了一个 sqlite 文件 当用户单击按钮时 我需要使用 URL
  • 存储 jtree 的状态/扩展节点以恢复状态

    我正在使用 JTree 我想知道了解 JTree 中扩展哪些节点以保存其状态 即保存所有扩展路径 的最佳方法是什么 所以如果我打电话model reload Jtree 不会保持折叠状态 但我将能够向用户恢复其原始状态 即所有展开的节点都将
  • 如何使用正则表达式提取短语和分号之间的文本

    我的文本文件中有多个文本行 我需要提取特定的值 我刚刚开始学习正则表达式 并尝试在这种情况下使用它 要提取的值是数字 但可以是整数或具有不同小数位的小数 下面显示了文本行的两个示例 settings parameterName1 15 0
  • Typescript noEmit 用例

    用途是什么noEmit在打字稿中 我很感兴趣 因为我想看看是否可以使用它进行开发 在其中编译并运行编译后的代码 而不将它们输出到文件系统上 这样会更有效 编辑 也许这会很直接 我可以使用noEmit打字稿中的标签来编译和运行代码而不将它们输
  • 如何通过formGroupName直接访问控件

    在此表单中 我必须访问 formControlName last 的控件以显示它的错误 div div div div
  • 导航栏标题对齐问题

    我已将自定义视图设置为导航栏标题视图 当页面为第一个时 视图控制器标题正确显示在中心 但是当视图控制器从另一个视图控制器推送时 标题会向右移动 Code void setUpTwoLineNavigationTitle CGFloat wi
  • C# 数字基类 [重复]

    这个问题在这里已经有答案了 我想编写一个可以接受任何数字的 C 方法 就像是 public static T Sum T a T b where T number not real code return a b 但我在 C 中没有看到 数
  • 在图像的特定部分填充颜色?

    我想在图像的特定区域填充特定颜色 EX 在上面Joker图像 如果触摸小丑的头发 然后在头发上填充特定的颜色 或者触摸鼻子 然后在鼻子上填充特定的颜色 等等 我希望你能明白我想说的是什么 谷歌搜索后 可以通过使用来实现UI贝塞尔路径 htt
  • 如何在 Laravel 中使用不同的子查询进行选择

    我有一个表名称 warga 该表包含 id 主键 no card 名称 描述 no card 是某个 id 的组 然后 我会根据no card来统计描述 这是 SQL 代码 SQL代码 SELECT description COUNT de
  • 了解分发冻结的 Python Tkinter 应用程序需要 TCL 中的哪些文件

    我试图找出 Python Python 2 6 Python 2 7 tcl 文件夹中的哪些文件是必需的 以便使用 Py2exe 或类似工具分发冻结的 Python Tkinter 应用程序 快速而肮脏的方法 使用 pyexe 作为示例 是
  • 为什么这个结构体定义会额外增加一个字节的内存使用量?

    include
  • codeigniter 3.1.0 中的 protected_identifiers 问题

    在以前的版本 2 2 6 中 我使用以下代码 this gt db gt protect identifiers false dataField tm IFNULL CONCAT WS pm firstName pm lastName as
  • 从 Java 中的 finally 块返回

    最近我很惊讶地发现Java 中的finally 块中可以有return 语句 似乎很多人都认为这样做是一件坏事 如 不要在finally子句中返回 https web archive org web 20070922061412 http