用面向对象的方法处理例外,就必须建立类的层次。类 Throwable位于这一类层次的最顶层,类Throwable有两个直接子类:Error和Exception。Error类对象(如动态连接错误等),由Java虚拟机生成并抛弃(通常,Java程序不对这类例外进行处理);Exception类对象是Java程序处理或抛弃的对象。其中类RuntimeException代表运行时由Java虚拟机生成的例外,如算术运算例外ArithmeticException(由除0错等导致)、数组越界例外ArrayIndexOutOfBoundsException等;其它则为非运行时例外,如输入输出例外IOException等。Java编译器要求Java程序必须捕捉或声明所有的非运行时例外,但对运行时例外可以不做处理。
Throwable所提供的方法:
String toString():代表该Throwable对象的字符串表示法。
String getMessage():返回和该对象相关的错误信息。
void printStackTrace():将例外生成所发生的途径显示出来。
void printStackTrace(PrintStream out):输出到一个PrintStream的数据流中,借此可将信息写到一个文件。
void printStackTrace(PrintWriter out):输出到一个PrintWriter的数据流中。
当程序需要捕捉数个不同的例外时,需要特别注意这些例外的顺序。应该按照类之间的阶层关系放置,越是基本的类越需放在后面的catch()区段。
catch(Exception e) {
System.err.println("caught an exception");
}
这段代码能捕获所有的异常,所以在实际使用时最好将其置于处理程序列表的末尾,防止跟随在后面的任何特殊异常控制器失效。
一个例外类至少需要包含一个默认的构造函数(用来显示默认的信息)及一个以String对象为参数的构造函数(用来显示用户提供的自订信息)。