我是 Java 新手,刚刚遇到一个在方法中使用“Throws”关键字的教程。我对此进行了一些研究,但仍然不太了解。
从我目前看到的情况来看,它告诉编译器在该特定方法中可能会引发某个异常。为什么我们需要告诉编译器这个?我在我的方法中只使用了一个 try-catch 语句制作了许多程序,并且效果很好——当然是这些 try-catch 语句管理异常,对吧?
我是 Java 新手,刚刚遇到一个在方法中使用“Throws”关键字的教程。我对此进行了一些研究,但仍然不太了解。
从我目前看到的情况来看,它告诉编译器在该特定方法中可能会引发某个异常。为什么我们需要告诉编译器这个?我在我的方法中只使用了一个 try-catch 语句制作了许多程序,并且效果很好——当然是这些 try-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
声明允许编译时验证方法:
更高,是的,某些方法必须捕获抛出的异常。就像你说的那样,管理它们的是 try-catch 块。
但是有一个异常,那就是RuntimeException,您不需要为此声明 throws 异常部分。RuntimeException(及其所有子类)称为未经检查的异常,之后通常无法恢复。
Throws 是一种向调用方法抛出异常的机制。这通常用于将异常抛出到可以处理的级别。
一个实际的例子是带有一些后端逻辑的基于 gui 的应用程序。如果后端出现问题,您可能希望向用户显示适当的消息。因此,从您的后端您可以将异常抛出到您的 UI 类,然后可以相应地显示一条消息。
Java程序在发生异常时抛出异常。但是,有时您需要手动抛出异常,因为使用了此throws
关键字。
例如:
class Abc {
public static void main(String args[]) throws IOException{
}}