“投掷”有什么作用,它有什么帮助?

我是Java的新手,刚刚遇到一个教程,其中在方法中使用了“Throws”关键字。我对此做了一些研究,但仍然不真正理解它。

从我到目前为止所看到的,它告诉编译器,该特定方法中可能会引发某个异常。为什么我们需要告诉编译器这一点?我已经在我的方法中使用了一个try-catch语句制作了许多程序,它工作得很好 - 当然是这些尝试-catch语句管理异常,对吧?


答案 1

您可以使用和如您所说,在方法中管理异常。在这种情况下,您不需要使用 .例如:trycatchthrows

public void myMethod()
{
  try {
    /* Code that might throw an exception */
  }
  catch (SpaceInvadersException exception) {
    /* Complicated error handling code */
  }
}

但是假设您有一千种方法,所有这些方法都可能抛出.然后,您最终将不得不将所有复杂的错误处理代码编写一千次。当然,你总是可以用一个可以从他们那里调用的方法创建一个类,但你仍然会被困在一千个块上。SpaceInvadersExceptionErrorHandlerdealWithSpaceInvadersException()trycatch

相反,您告诉编译器这一千个方法中的每一个都可以抛出一个.然后,任何调用这些方法之一的方法都需要通过使用 -或通过告诉编译器它可能会引发 .这是使用关键字完成的,如下所示:SpaceInvadersExceptiontrycatchSpaceInvadersExceptionthrows

public void myMethod() throws SpaceInvadersException
{
  /* Code that might throw an exception */
}

public void callingMethod()
{
  try {
    myMethod();
  }
  catch (SpaceInvadersException exception) {
    /* Complicated error handling code */
  }
}

在这种情况下,您需要通知编译器可能会抛出.这意味着如果不以某种方式处理异常(-或在调用方法上使用关键字),则无法调用该方法。如果没有,您可以在不执行任何异常处理的情况下调用该方法,并获取程序中任何位置未处理的异常(这将是不好的)。myMethodSpaceInvadersExceptiontrycatchthrowsthrows

由于避免代码重复总是更好的,因此通常最好在更高级别的函数中将错误处理放在一个 - 中,而不是在所有低级方法中单独处理它。这就是存在这种机制的原因。trycatch


答案 2

该关键字声明可以从方法中引发异常throws

还可以使用块来捕获方法中的异常。如果你抓住了它,并且没有重新抛出它,那么它就不会被扔出方法。catch

声明允许编译时验证方法:throws

  • 捕获它引发的异常,包括它调用的方法中的异常。
  • 或声明它们,以便其调用方可以进行相同的检查。