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后面的语句都必须执行。