[摘要]优势3:分组和区分错误类型 因为所有在程序内部抛出的异常都是对象,异常的分组或分类是类继承的自然结果。在Java平台中一组相关异常类的例子是在java.io中定义的IOException和它的子类。IOException是最普通的IO异常管理类,并且它描述了在执行I/O操作时所发生的任意的错误...
优势3:分组和区分错误类型
因为所有在程序内部抛出的异常都是对象,异常的分组或分类是类继承的自然结果。在Java平台中一组相关异常类的例子是在java.io中定义的IOException和它的子类。IOException是最普通的IO异常管理类,并且它描述了在执行I/O操作时所发生的任意的错误类型。它的子类描述了一些特殊的错误。例如,FileNotFoundException异常类代表不能在本地磁盘上找到一个文件。
一个方法能够编写特殊的异常处理器,使它能够处理非常特殊的异常。FileNotFoundException异常类没有子类,因此下面的异常处理器只能处理一种异常类型:
catch (FileNotFoundException e) {
...
}
一个方法能够基于它的分组或通过在catch子句中所指定的任何异常的超类的一般类型来捕获异常。例如,要捕获所有的I/O异常,而不管它们的具体类型,就可以在异常处理器中指定一个IOException参数:
catch (IOException e) {
...
}
这个处理器将捕获所有的I/O异常,包括FileNotFoundException,EOFException等等。你能够通过查询传递给异常处理器的参数找到发生错误的详细信息。例如,打印堆栈执行路线:
catch (IOException e) {
e.printStackTrace(); // output goes to Sytem.err
e.printStackTrace(System.out); // send trace to stdout
}
你甚至可以创建一个能够处理任意类型的异常的异常处理器:
catch (Exception e) { // a (too) general exception handler
...
}
Exception类是Throwable类结构中的顶级类,因此,这个处理器将捕获除了那些被特定处理器捕获的异常以外的异常。你可能想你的程序是否都是这种处理异常的方法,例如,为用户打印错误消息并且退出。
但是,在大多数情况下,你需要异常处理器来尽可能的处理精确一些。原因是在处理器决定最好的恢复策略之前,必须做第一件是判断发生异常的类型是什么。在没有捕获特定错误的情况下,处理器必须有效的提供任意的可能性。Exception 处理器是最一般的异常处理器,使用这个处理器使得代码捕获和处理更多的程序员没有预料到的错误倾向,从而使得处理器没有目的性。
象我们展示的一样,你能够创建异常组,并且用一般化的方式来处理异常,或者使用特定异常类型来区分异常并且用精确的方式来处理异常。
捕获和处理异常
这段向说明怎样使用异常处理器的三个组成部分-try,catch和finally块来编写异常处理器。这段最后举一个例子,并且分析在不同的情况下发生了什么。
……