java - 需要权威来源来解释为什么你不应该抛出或捕获 java.lang.Exception

标签 java exception-handling

我有一个多小时后的编码标准 session ,我需要快速回答这个问题。

经验丰富的 Java 程序员的常识是您不会抛出或捕获 java.lang.Exception(除了极少数异常(exception) - 没有双关语意)。你不这样做的原因是声明

catch (java.lang.Exception ex) {...}

也会捕获未经检查的异常,在大多数情况下这不是预期的。

我们已经有很多由现有团队成员编写的遗留代码,他们在其中捕获 java.lang.Exception 的子类,记录错误,然后将子类作为 java.lang.Exception 重新抛出。

我需要说服他们

  1. 他们需要停止编写这样的代码。
  2. 需要修复使用此反模式的现有代码

数字 2 意味着相当数量的重构。

如果我可以展示 Java 社区重量级人物之一(即 Joshua Bloch、James Gosling)的文章或博客条目来说明这一点,这将缩短 session 上的争论。到目前为止,我的 google-fu 还没有找到任何结果。

有没有人知道一位受人尊敬的 Java 大师的文章或博客说您不应该抛出或捕获 java.lang.Exception?

非常感谢快速回答。

院长

最佳答案

这是一些东西:Java Tip 134: When catching exceptions, don't cast your net too wide (Java 世界)

Effective Java Joshua Bloch 的(第二版)第 9 章(异常)可能对此有所介绍,尽管我无法快速找到任何关于不捕获 Exception 的信息。

这里是 a Q&A from JavaWorld关于这个问题(也指向 Java 技巧 134)——它还解释了为什么有时您必须打破不捕获 Exception 甚至 Throwable 的规则。

关于java - 需要权威来源来解释为什么你不应该抛出或捕获 java.lang.Exception,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1578557/

相关文章:

java - 父/子方法覆盖

java - OkHttp 回调吞噬异常 - 设计缺陷或常见做法

未实现可序列化接口(interface)的 Java 对象序列化

java - Python 数组与 Java 中的相同吗?

java - Selenium chrome Keys.ENTER 不适用于 'title-input'

java - 在 Web 部署中将私钥保存在哪里?

powershell - (PowerShell) 记录异常并继续(Active Directory 模块)

java - 定期检查超时条件

ruby - 如何向 "not implemented yet"发送信号?

exception-handling - 如果发生任何异常,如何执行某事