3

我最近一直在重构一些 Java 代码……我发现有很多 RuntimeExceptions 被抛出(即未经检查的异常)。我创建了自己的已检查异常,并用我自己的异常替换了这些 RuntimeExceptions 的每个实例。然后,这迫使我检查异常。

话虽如此,我发现检查异常更好,因为另一个开发人员将确保处理异常......而不是程序只是吃异常而不向用户显示任何内容。

我已经阅读了许多关于未检查异常与已检查异常的文章。但是,我仍然觉得我更多地检查了异常,因为它减少了人为错误。

主要使用检查的异常是多么糟糕的编程?有没有其他人觉得他们更喜欢受检查的异常而不是未检查的异常?

4

2 回答 2

5

尽管不同的人对此会有不同的看法,但我的建议是:

  • 对应由您认为属于应用程序逻辑的部分处理的异常情况使用已检查异常,例如:用户输入了不存在的用户名进行登录、用户尝试保存并且项目超出了她的订阅允许的限制等。这样,发现异常情况的代码客户端至少要承认该情况可能发生的事实,并希望以最合适的方式处理它
  • 使用未经检查的异常在不受您控制且无法通过应用程序逻辑恢复的情况下尽早失败,例如:您的函数接收错误的参数作为参数:听起来像是抛出“非法参数异常”的完美场景,这是大多数编程语言中的运行时异常
于 2015-02-12T20:02:59.473 回答
4

已检查的异常看起来很棒,但实际上它们根本无法解决它们旨在解决的问题(更多细节在这里https://arpytoth.com/2016/04/08/the-problem-with-checked-exceptions/) .

Java不会强制您处理异常,它只是强制您准确确认哪些异常可能通过。大多数开发人员使用空块捕获它们或使用 throws 子句让异常通过。这将总体上降低代码质量,使其更加冗长、复杂并且有时难以测试,而没有任何显着的好处。另请注意,Java 的新功能也不能很好地处理已检查的异常(例如 lambda 表达式)。我的建议是避免检查异常并改用运行时。

于 2016-06-22T11:29:04.510 回答