“投掷”有什么作用,它有什么帮助?
我是Java的新手,刚刚遇到一个教程,其中在方法中使用了“Throws”关键字。我对此做了一些研究,但仍然不真正理解它。
从我到目前为止所看到的,它告诉编译器,该特定方法中可能会引发某个异常。为什么我们需要告诉编译器这一点?我已经在我的方法中使用了一个try-catch语句制作了许多程序,它工作得很好 - 当然是这些尝试-catch语句管理异常,对吧?
我是Java的新手,刚刚遇到一个教程,其中在方法中使用了“Throws”关键字。我对此做了一些研究,但仍然不真正理解它。
从我到目前为止所看到的,它告诉编译器,该特定方法中可能会引发某个异常。为什么我们需要告诉编译器这一点?我已经在我的方法中使用了一个try-catch语句制作了许多程序,它工作得很好 - 当然是这些尝试-catch语句管理异常,对吧?
您可以使用和如您所说,在方法中管理异常。在这种情况下,您不需要使用 .例如:try
catch
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
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
该关键字声明可以从方法中引发异常。throws
还可以使用块来捕获方法中的异常。如果你抓住了它,并且没有重新抛出它,那么它就不会被扔出方法。catch
声明允许编译时验证方法:throws