“投掷”做了什么以及它有什么用?

时间:2013-08-28 14:38:19

标签: java exception methods exception-handling keyword

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

从我到目前为止看到的,它告诉编译器在该特定方法中可能抛出某个异常。为什么我们需要告诉编译器呢?我在我的方法中只使用了try-catch语句制作了许多程序,并且它运行得很好 - 当然这是管理异常的try-catch语句,对吧?

5 个答案:

答案 0 :(得分:35)

如您所说,您可以使用trycatch来管理方法中的例外。在这种情况下,您不需要使用throws。例如:

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

但是假设你有一千种方法,所有方法都可能抛出一个SpaceInvadersException。然后你最终必须编写所有复杂的错误处理代码一千次。当然,你总是可以使用ErrorHandler方法创建一个dealWithSpaceInvadersException()课程,你可以从中调用它们,但是你仍然会遇到一千try - catch块。

相反,您告诉编译器这千种方法中的每一种都可以抛出SpaceInvadersException。然后,调用这些方法之一的任何方法都需要处理错误本身,可以使用try - catch,也可以告诉编译器 it 可能会抛出错误SpaceInvadersException。这是使用throws关键字完成的,如下所示:

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

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

在这种情况下,您需要通知编译器myMethod可以抛出SpaceInvadersException。这意味着如果不以某种方式处理异常(try - catch或在调用方法上使用throws关键字),则无法调用该方法。如果不存在throws,则可以在不进行任何异常处理的情况下调用该方法,并获得一个未在程序中的任何地方处理的异常(这将是不好的)。

由于避免代码重复总是更好,因此通常最好将错误处理提升到try - catch,而不是单独处理它。在所有低级方法中。这就是存在这种机制的原因。

答案 1 :(得分:4)

throws关键字声明可以抛出该方法的 out 异常。

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

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

  • 捕获它抛出的异常,包括来自它调用的方法的异常。
  • 或声明它们,以便其来电者可以进行相同的检查。

答案 2 :(得分:2)

更高的是,某些方法必须捕获被抛出的异常。就像你说的那样,管理它们的是try-catch块。

但有一个例外,那就是 RuntimeException ,您不需要声明throws异常部分。 RuntimeException(及其所有子类)被称为未经检查的异常,之后您通常无法恢复。

答案 3 :(得分:0)

抛出是一种将异常抛出到调用方法的机制。这通常用于将异常抛出到可以处理的级别。

一个实际的例子是基于gui的应用程序,它有一些后端逻辑。如果后端出现问题,您可能希望向用户显示正确的消息。因此,从您的后端,您可以将异常抛到您的UI类,然后可以相应地显示消息。

答案 4 :(得分:0)

Java程序在发生时会抛出异常。但是,有时会出现手动抛出异常的情况,因为使用了throws个关键字。

例如: class Abc { public static void main(String args[]) throws IOException{ }}