什么时候应该在Java中使用throws关键字?

Pra*_*kar 3 java exception throws

throws关键字仅用于检查的异常。它通过throws关键字指示调用者使用try catch块来排除所有列出的异常。

由于我们知道模块中可能发生哪种检查异常,因此:

  1. 我们为什么不在模块内部使用try catch块来处理已检查的异常?
  2. 我们可以使用try-catch块处理模块内部的检查异常吗?
  3. 如果(2)的答案为“是”,那么为什么我们可以在模块自身内部排除相同的异常时,为什么要使用throws关键字强制调用者将这些异常排除在外?

这样,我们无需在每次调用该方法时手动手动例外。

roo*_*eee 5

  1. 这是关于如何从异常中恢复的全部内容。例如java.lang.File,当文件不存在时该怎么办?由于不知道哪种方法最适合被呼叫者,因此可以让被呼叫者处理这种情况
  2. 当然,如果明确说明应如何处理异常,则可以在模块中处理异常。如果处理取决于被调用方或上下文,则让调用函数确定
  3. 现在应该清楚了


Swe*_*per 5

让我以FileInputStream::new投掷FileNotFoundException为例来消除您的误解。

例如我们有一些这样的代码:

FileInputStream fis = new FileInputStream("/some/path/to/file.txt");
Run Code Online (Sandbox Code Playgroud)

这可能会抛出一个FileNotFoundException,而你是说,

FileInputStream显然知道它会抛出 a FileNotFoundException,那么为什么它不自己处理它呢?

因为FileInputStream不知道如何处理异常!

根据具体情况,有多种处理方法FileNotFoundException

  • 如果文件路径来自用户输入,您可能会要求用户输入另一个文件路径
  • 您可能会显示错误消息
  • 你可能什么都不做,只是让它崩溃

根据具体情况,以上所有选项都可能是完全明智的选择。aFileInputStream将如何了解您的情况?它不是!

这就是为什么它带有一个throws子句:

我抛出这些异常,你自己处理。