catch块
通过在try
块之后直接提供一个或多个catch
块,可以将异常处理程序与try
块关联。在try
块的结尾与第一个catch
块的开头之间不能有代码。
try {
} catch (ExceptionType name) {
} catch (ExceptionType name) {
}
每个catch
块都是一个异常处理程序,用于处理其参数指示的异常类型。参数类型ExceptionType
声明处理程序可以处理的异常类型,并且必须是从Throwable
类继承的类的名称。处理程序可以使用name
引用异常。
catch
块包含在调用异常处理程序时以及在调用异常处理程序时执行的代码。当处理程序是调用堆栈中第一个ExceptionType
与抛出的异常类型匹配的异常处理程序时,运行时系统将调用该异常处理程序。如果可以合法地将抛出的对象分配给异常处理程序的参数,则系统认为它是匹配项。
以下是writeList
方法的两个异常处理程序:
try {
} catch (IndexOutOfBoundsException e) {
System.err.println("IndexOutOfBoundsException: " + e.getMessage());
} catch (IOException e) {
System.err.println("Caught IOException: " + e.getMessage());
}
异常处理程序不仅可以打印错误消息或暂停程序,还可以做更多的事情。他们可以执行错误恢复,提示用户做出决定,或者使用链接的异常将错误传播到更高级别的处理程序,如Chained Exceptions部分中所述。
使用一个异常处理程序catch不止一种类型的异常
在 Java SE 7 和更高版本中,单个catch
块可以处理多种类型的异常。此功能可以减少代码重复,并减少catch过于广泛的异常的诱惑。
在catch
子句中,指定块可以处理的异常类型,并用竖线(|
)分隔每种异常类型:
catch (IOException|SQLException ex) {
logger.log(ex);
throw ex;
}
注意 :如果catch
块处理多个异常类型,则catch
参数隐式为final
。在此示例中,catch
参数ex
是final
,因此您不能在catch
块内为其分配任何值。