-2

我在谷歌上搜索并阅读了许多关于 try,catch 和 throws 的答案。我仍然无法回答我的问题。

我的问题是,我们尝试一段代码,如果发生异常,执行将立即终止,并由 catch 处理其余部分。实际上,我们通过在括号中声明一个类(沿实例)来定义异常的范围catch(IOException e)

这进一步按照我们在块中的代码运行..say,打印错误

{
     e.printStackTrace();
}

然而,在 throws 的情况下,我们执行与 catch 中相同的操作,在 throws 之后在括号内单独声明类,我们期望这是我们期望的异常源。

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

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

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

4

2 回答 2

1

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

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

于 2015-02-02T07:41:31.120 回答
1

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

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

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

通过这样做,您省略了第三种可能性:“忽略一切,希望没有任何问题”,Java 的创建者大概认为这是危险的。

(第三种可能性仍然可以使用非检查异常来完成。这与 Java 创建者的意图背道而驰,但无论如何很多人和 API 最终都会这样做。)

于 2015-02-02T07:46:14.500 回答