16.2 异常的捕获
异常的抛出就是将异常抛给异常处理器,但没有告诉异常处理器需要如何处理。这是一个极其不负责任的表现,只有需要好好地处理异常现象,在程序运行时才不会再出现异常报错。
16.2.1 捕获多个异常
Java语言对于异常的处理,通过try和catch语句来实现。当有一个异常被抛到异常处理器后,通过try和catch语句对被抛出的异常进行捕获和处理。其语法结构如下:
try
{可能会出现异常的程序段}
catch(Exception e)
{捕获异常后,如何处理它}
【实例16.4】下面修改前面的一个例子,代码如下:
01 import java.io.*;
02 public class file4
03 {
04 public static void main(String[]args)throws Exception
05 {
06 File f=new File("d://raf.txt");
07 RandomAccessFile raf=new RandomAccessFile(f,"rw");
08 String s="这个就是这所学校最好的学生";
09 System.out.println("现在要添加数据了!");
10 try
11 {
12 long l=raf.length();
13 raf.seek(l);
14 raf.writeUTF(s);
15 System.out.println("刚刚加到后面的字符串是:");
16 raf.seek(l);
17 System.out.println(raf.readUTF());
18 raf.seek(0);
19 System.out.println(raf.readUTF());
20 raf.close();
21 }
22 catch(Exception e){}
23 }
24 }
【代码说明】代码第10~21行是要捕获异常的程序段,第22行是捕获异常后的程序处理,这里没有任何处理代码。
【运行效果】
现在要添加数据了!
刚刚加到后面的字符串是:
这个就是这所学校最好的学生
这个就是这所学校最好的学生
上述程序将异常捕获后进行了处理,运行时,就不会再对异常报错。如果一个程序段有多个异常出现,应该如何处理呢?下面来看看多异常的处理方法。
try
{
}
catch(1)
{
};
catch(2)
{
};
catch(3)
{
};
finally
{
};
以上结构的意义是:若在try语句出现异常后,那么看它出现的异常是“1”还是“2”或者“3”,如果是以上的异常,那么就分别执行catch后“{}”内的语句。
说明
无论是否发生异常,或者发生哪一个异常,都要执行finally后的语句。这一点非常重要,请读者务必牢记。
【实例16.5】下面看一个有关多异常处理的实例。
01 import java.io.*;
02 public class file5
03 {
04 public static void main(String[]args)throws Exception
05 {
06 int[]a=new int[5];
07 try
08 {
09 a[10]=1;
10 }
11 catch(ArrayIndexOutOfBoundsException ae)
12 {
13 System.out.println(ae);
14 }
15 catch(ArrayStoreException ae)
16 {
17 System.out.println(ae);
18 }
19 catch(ArithmeticException ae)
20 {
21 System.out.println(ae);
22 }
23 finally
24 {
25 System.out.println("发现了异常,并且处理它了!");
26 }
27 }
28 }
【代码说明】代码第9行发生了错误,但它在try程序段内。所以可以捕获异常,判断异常是不是第11~22行所指向的异常,判断后还要执行第23~26行的finally程序段。
【运行效果】
java.lang.ArrayIndexOutOfBoundsException:10
发现了异常,并且处理它了!
以上的程序段证明了前面所说的,无论是否发生异常,或者发生哪一个异常,finally后面的语句都必须执行。