第五章Java的异常处理.ppt

异常的捕获过程 ? 需要注意的是:如果 try 块中没有任何的异常 抛出,则所有的 catch 子句将会被跳过;如果 try 块中所抛出的异常对象类型与所有的 catch 子句中的所声明的异常类型都不匹配, 则方法会立即中止,并将该异常对象继续抛 出,沿调用堆栈传递。 example public class ExampleOfException { String[] lines = {The first line, The second line,The last line}; public static void main (String[] args) { ExampleOfException eoe = new ExampleOfException(); eoe.methodA(); System.out.println(Program finished.); } ... void methodC() { for (int i=0; i4; i++) { try { System.out.println (lines[i]); } catch (ArrayIndexOutOfBoundsException e) { System.out.println(Re-setting Index Value); } } } } example ? 上面的例子中可能会产生数组越界异常,所以将其 置于 try 块中,并在 catch 子句中对 ArrayIndexOutOfBoundsException 类型的异常进行 捕获,并进行处理。 ? 如果 try 块中可能抛出多个类型的异常,程序员可以 使用多个 catch 子句对这些异常进行捕获,每种异常 类型对应一个单独的 catch 子句。 ? 需要注意的是,这些 catch 子句是顺序执行的。这意 味着,异常对象总是被第一个 catch 子句首先捕获, 如果类型不匹配,才会执行下一个 catch 子句。读者 可以试着分析下面的程序片断,看看有什么样的问 题存在。 问题 ? Java 运行系统从上到下分别对每个 catch 语句处理 的例外类型进行检测 , 直到类型匹配为止; ? catch 语句的排列顺序应该是从子类到父类 try { … }catch(Exception e) { … }catch(IOException e) { … }catch(ArrayIndexOutOfBoundsException e) { … } catch 语句的顺序 ? 捕获异常的顺序和不同 catch 语句的顺序有关 , 当捕获到一个异常时 , 剩下的 catch 语句就不再 进行匹配。因此,在安排 catch 语句的顺序时, 首先应该捕获最特殊的异常,然后再逐渐一 般化。也就是一般先安排子类,再安排父类。 ? finally 捕获异常的最后一步是通过 finally 语句为 异常处理提供一个统一的出口,使得在 控制流转到程序的其它部分以前,能够 对程序的状态作统一的管理。不论在 try 代码块中是否发生了异常事件, finally 块 中的语句都会被执行。 finally ? finally 子句的一般格式: try{ 抛出异常的代码 }catch ( 某 Exception 类型 e){ 处理该异常类型的代码 } … }catch ( 某 Exception 类型 e){ 处理该异常类型的代码 }finally{ 最后一定会被执行的代码 } finally ? 不论 try 块中的代码是否抛出异常及异常是否被捕获, finally 子句中的代码一定会被执行: ? 如果 try 块中没有抛出任何异常,当 try 块中的代码执行结 束后, finally 中的代码将会被执行; ? 如果 try 块中抛出了一个异常且该异常被 catch 正常捕获, 那么 try 块中自抛出异常的代码之后的所有代码将会被跳 过,程序接着执行与抛出异常类型匹配的 catch 子句中的 代码,最后执行 finally 子句中的代码。 ? 如果 try 块中抛出了一个不能被任何 catch 子句捕获(匹配) 的异常, try 块中剩下的代码将会被跳过,程序接着执行 finally 子句中的代码,未被捕获的异常

文档评论(0)

1亿VIP精品文档

相关文档