当然,抛出的异常必须在某处得到处理。这个“地点”就是“异常处理程序”(exception
handler),针对每个要捕获的异常,你得准备相应的处理程序。异常处理程序紧跟在
try 区块之后,以关键字 catch 表示:
try {
// Code that might generate exceptions
} catch(Type1 id1) {
// Handle exceptions of Type1
} catch(Type2 id2) {
// Handle exceptions of Type2
} catch(Type3 id3) {
// Handle exceptions of Type3
}
// etc...
每个 catch 子句(异常处理程序)看起来就像是仅仅接受一个特定参数的方法。可以在
处理程序的内部使用标识符(id1,id2 等等),这与方法参数的使用很相似。有时你可
能用不到标识符,因为异常的类型已经给了你足够的信息来对异常进行处理,但标识符
并不可以省略。
异常处理程序必须紧跟在 try 块之后。当异常被抛出时,异常处理机制将负责搜寻参数
与异常类型相匹配的第一个处理程序。然后进入 catch 子句执行,此时认为异常得到了
处理。一旦 catch 子句结束,则处理程序的查找过程结束。注意,只有匹配的 catch 子
句才能得到执行;这与 switch 语句不同,switch 语句需要你在每一个 case 后面跟一
个 break,以避免执行后续的 case 子句。
注意在 try 块的内部,不同的方法调用可能会产生类型相同的异常,你只需要提供一个
handler),针对每个要捕获的异常,你得准备相应的处理程序。异常处理程序紧跟在
try 区块之后,以关键字 catch 表示:
try {
// Code that might generate exceptions
} catch(Type1 id1) {
// Handle exceptions of Type1
} catch(Type2 id2) {
// Handle exceptions of Type2
} catch(Type3 id3) {
// Handle exceptions of Type3
}
// etc...
每个 catch 子句(异常处理程序)看起来就像是仅仅接受一个特定参数的方法。可以在
处理程序的内部使用标识符(id1,id2 等等),这与方法参数的使用很相似。有时你可
能用不到标识符,因为异常的类型已经给了你足够的信息来对异常进行处理,但标识符
并不可以省略。
异常处理程序必须紧跟在 try 块之后。当异常被抛出时,异常处理机制将负责搜寻参数
与异常类型相匹配的第一个处理程序。然后进入 catch 子句执行,此时认为异常得到了
处理。一旦 catch 子句结束,则处理程序的查找过程结束。注意,只有匹配的 catch 子
句才能得到执行;这与 switch 语句不同,switch 语句需要你在每一个 case 后面跟一
个 break,以避免执行后续的 case 子句。
注意在 try 块的内部,不同的方法调用可能会产生类型相同的异常,你只需要提供一个
针对此类型的异常处理程序