java 中没有 throws 的损失是多少?

What is the loss without throws in java?

我用谷歌搜索并阅读了很多关于尝试、捕捉和投掷的答案。我仍然无法回答我的问题。

我的问题是,我们尝试一段代码,如果出现异常,执行会立即终止,其余的由 catch 处理。事实上,我们通过在括号 catch(IOException e)

中声明一个 class(沿实例)来定义异常范围

这进一步按照我们块中的代码行事..比如说,打印错误

{
     e.printStackTrace();
}

然而,在抛出的情况下,我们做与 catch 中相同的操作,在抛出后的括号内亲自声明 classes,我们希望它是我们期望的异常源。

.
.
}
catch(Exception e)
{
     e.printStackTrace
}

如果发生,执行终止,返回调用者并最终执行 try catch 本身。

所以我真的不明白是什么让 throws 如此特别。 (请不要混淆复杂的答案。您可以假设我是初学者,我相信传教士知道如何让任何人理解这些概念)。

throws用于告诉方法的调用者:注意!如果你调用这个方法,你可能会得到一个 IOException。所以你必须处理它。 所以你使用 throws 告诉人们你抛出的异常。

catch 被一个方法的调用者用来表示:如果这个方法调用恰好抛出一个 IOException,我将按以下方式处理它。因此,当您知道如何处理由您调用的方法引起的异常情况时,您就可以使用 catch。

throws 从语言设计的角度来看并不是绝对必要的。事实上,很多语言并不使用它。

使用 throws 定义方法抛出的(已检查)异常的要求是 Java 创建者的 选择。它会迫使您,开发人员,对您所做的事情更加小心。这个想法是你应该做两件事之一有例外:

  • 明确处理异常,通过捕获它,或者
  • 明确不处理它并允许异常冒泡到父方法,父方法必须对处理与不处理做出相同的决定

通过这样做,您忽略了第三种可能性:"Just ignore everything and hope nothing breaks",Java 创作者可能认为这种可能性很危险。

(第三种可能性仍然可以使用非检查异常来完成。这违背了 Java 创建者的意图,但是很多人和 API 最终还是这样做了。)