[摘要]下面的例子定义和实现了一个叫做ListOfNumbers的类。在类的构造器中,ListOfNumbers创建了一个Vector,它包含了从0到9的十个连续的整数。ListOfNumbers类也定义了一个叫writeList的方法,这个方法把这个数字列表写入一个叫做OutFile.txt的文本文件中...
下面的例子定义和实现了一个叫做ListOfNumbers的类。在类的构造器中,ListOfNumbers创建了一个Vector,它包含了从0到9的十个连续的整数。ListOfNumbers类也定义了一个叫writeList的方法,这个方法把这个数字列表写入一个叫做OutFile.txt的文本文件中。这个例子使用了在java.io中定义的输出类,这个类在I/O:读写这一章中介绍。
// 注意: 这样的设计,这个类不会被编译
import java.io.*;
import java.util.Vector;
public class ListOfNumbers {
private Vector victor;
private static final int SIZE = 10;
public ListOfNumbers () {
victor = new Vector(SIZE);
for (int i = 0; i < SIZE; i++) {
victor.addElement(new Integer(i));
}
}
public void writeList() {
PrintWriter out = new PrintWriter(
new FileWriter("OutFile.txt"));
for (int i = 0; i < SIZE; i++) {
out.println("Value at: " + i + " = " +
victor.elementAt(i));
}
out.close();
}
}
这个例子中的第一行黑体字部分代码调用了一个构造器,这个构造器初始化一个文件输出流。如果这个文件不能被打开,这个构造器会抛出一个IOException异常。第二行黑体字部分代码调用一个Vector类的elementAt方法,如果它的参数值太小(小于零)或太大(大于Vector中当前所包含的元素数),那么它会抛出一个ArrayIndexOutOfBoundsException异常。
如果试图编译ListOfNumbers类,编译会打印一个有关被FileWrite构造器所抛出的异常的错误消息。这是因为构造所抛出的IOException异常是一个编译检查性异常,被elementAt方法抛出的ArrayIndexOutOfBoundsException异常是一个运行时异常,而Java编程语言只要求程序处理编译检查性异常,所以你只能获取一个错误消息。
现在随着对ListOfNumbers类的熟悉,并且知道异常是在程序中的什么地方抛出的,那么你就可以准备把异常处理器编写到catch块来处理那些异常。
怎样抛出异常
在你能够捕捉一个异常之前,在程序中的某个地方必须有抛出这个异常的代码在在。任何代码都可以抛出异常:它们可以你自己的代码,也可以是来自于别人所写的包中的代码(例如与Java平台一起提供的程序包),或者是Java运行时环境。不管抛出什么样的异常,都要使用throw语句把异常抛出。
你可能已经注意到,Java平台提供了各种的异常类。所有的这些类都是Throwable类的子类,并且它们都允许程序来区分在程序执行期间所发生的各种类型的异常。
你也可以创建自己的异常类来描述你编写的类中所发生的问题。实际上,如果你是一个程序包的开发人员,你可能必须创建你自己的异常类的集合,以便于让你的用户来区分在你的程序包中发生的错误是来自己于Java平台还是其它的包。
你也可以创建异常链,异常链在Java Standard Edition 1.4中被引入。更多的信息,请看“异常链”这一节。
……