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

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

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

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

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

但是假设你有一千个方法,所有这些方法都可能抛出一个SpaceInvadersException 。 那么你最终必须编写所有复杂的error handling代码一千次。 当然,您总是可以使用可以从它们调用的dealWithSpaceInvadersException()方法创建一个ErrorHandler类,但是您仍然会遇到一千个trycatch块。

相反,您告诉编译器这些方法中的每一个都可能抛出一个SpaceInvadersException 。 然后,调用这些方法之一的任何方法都需要通过使用trycatch或告诉编译器可能抛出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 。 这意味着如果不以某种方式处理exception( trycatch或在调用方法上使用throws关键字),则无法调用该方法。 如果不存在throws ,你可以调用该方法而不进行任何exception处理,并获得一个未在程序中的任何地方处理的exception(这将是不好的)。

因为避免代码重复总是更好,所以通常最好将error handling转移到trycatch中,而不是在所有低级方法中单独处理它。 这就是存在这种机制的原因。

throws关键字声明可以抛出exception该方法。

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

throws声明允许编译时validation一个方法:

  • 捕获它抛出的exception,包括它调用的方法。
  • 或者声明它们,以便其呼叫者可以进行相同的检查。

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

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

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

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

Java程序一旦发生就抛出exception。但是,有时候你想手动抛出exception,因为这个throws关键字。

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