【问题标题】:What is the usage of checked exceptions in java?java中检查异常的用途是什么?
【发布时间】:2016-06-30 16:58:59
【问题描述】:

在 oracle 文档中它说

如果可以合理地期望客户端从异常中恢复,则将其设为已检查异常。如果客户端无法从异常中恢复,请将其设为未经检查的异常。

例如,ClassNotFoundException 和 CloneNotSupportedException 是已检查异常的两个示例,但是如果我们在运行时捕获这些类型的异常,客户端将无法解决它们。 但是如果他们用客户端这个词来表示开发人员,那也没有任何意义,因为程序员在运行时无法做任何事情来从这些类型的异常中恢复。

【问题讨论】:

  • 是的,他可以。在 CloneNotSupportedException 上,他可以求助于另一种复制算法。在 ClassNotFoundException 上,他可以尝试找到另一个类来实例化(考虑反射)。
  • 根据您的类比,您可以对取消检查的异常说同样的话,例如在 ArithmeticException 或 IllegalArgumentException 的情况下,您可以向用户询问新的(正确的)值。
  • 没错。但是可以在没有用户交互的情况下更改克隆算法。当您遇到非法争论时,没有更多信息就无法恢复。
  • 因此您在 oracle doc 中推断出 reasonably 一词,表示静默且无需用户交互。因为我认为要求用户提供正确的输入是很合理的。
  • 是的,因为“客户端”的意思是“调用引发异常的方法的代码”。

标签: java exception runtimeexception


【解决方案1】:

有两件事在我的脑海里

  1. 当出现问题时清理混乱 / 像什么都没发生一样继续 / 尝试另一种方法来完成任务。假设您打开了一个数据库连接并从中读取。如果抛出一些异常,你要确保在离开这个地方之前清理干净。例如,您可以在 finally 块中使用 connection.close() 等。您不希望您的应用程序因不那么严重的错误而致命地抛出异常。

  2. 您可能需要重新抛出异常。假设它与上面的异常相同,但这不是您要向用户显示的消息。您可以编写一个映射器,该映射器会抛出您使用所需消息编写的自定义异常。

【讨论】:

    猜你喜欢
    • 2012-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-17
    • 1970-01-01
    • 1970-01-01
    • 2020-03-10
    相关资源
    最近更新 更多