7.3 异常的处理方式之二:throws(1)

在本节中主要讲解throws声明异常的方式。异常的声明是告诉Java编译器有一个异常出现了。在方法中,异常声明在方法的头部,利用关键字"throws"来表示此方法在运行的时候,很可能会出现异常现象。

声明异常是指一个方法不处理它产生的异常,而是向上传递,谁调用这个方法,这个异常就由谁处理。例如在某方法内的某一段代码可能会发生异常,但是在 这个方法内不想有任何的异常处理,所以在没有使用任何的代码块来捕捉这些异常时,就必须在声明方法的同时指出所有可能发生的异常,给以后要调用此方法的其 他方法提个醒,意思是我这有个异常等着你来处理呢,你要做好准备啊。声明异常使用到了throws关键字,在方法名和throws关键字后加上抛出的异 常,基本格式如下:

1 方法返回值类型 方法名(参数列表)throws 异常类1,异常类2,… 

【代码剖析】以下是关于由一个方法抛出异常由调用该方法的上级方法处理的实例,具体代码如下:

 1 public class AbnormalTest{  
 2     // 声明异常  
 3     public void catchThows(int str) throws
 4  ArrayIndexOutOfBoundsException,  
 5             ArithmeticException, NullPointerException {  
 6 //声明catchThows方法的同时指出要可以出现的异常类型  
 7         System.out.println(str);  
 8         if (str == 1) {  
 9             int[] a = new int[3];  
10             a[5] = 5;  
11  
12         } else if (str == 2) {  
13             int i = 0;  
14             int j = 5 / i;  
15         } else if (str == 3) {  
16             String s[] = new String[5];  
17             s[0].toLowerCase();  
18         } else {  
19             System.out.println("正常运行,没有发现异常");  
20         }  
21     }  
22  
23     public static void main(String args[]) {  
24         AbnormalTest yc = new AbnormalTest ();  
25         try {  
26             yc.catchThows(0);  
27         } catch (Exception e) {  
28             System.out.println("异常:" + e);    
29 
30 //捕获Exception异常,并打印出相应的异常信息  
31         }  
32         try {  
33             yc.catchThows(1);  
34         } catch (ArrayIndexOutOfBoundsException e) {  
35             System.out.println("异常:" + e);  
36 //捕获ArrayIndexOutOfBoundsException异常,并打印出相应的异常信息  
37         }  
38         try {  
39             yc.catchThows(2);  
40         } catch (ArithmeticException e) {  
41             System.out.println("异常:" + e);  
42 
43 //捕获ArithmeticException异常,
44 并打印出相应的异常信息  
45         }  
46         try {  
47             yc.catchThows(3);  
48         } catch (Exception e) {  
49             System.out.println("异常:" + e);  
50 
51 //捕获Exception异常,并打印出相应的异常信息  
52         }  
53     }  
54 } 

 

 运行结果如下:

1 0 
2 正常运行,没有发现异常  
3 1 
4 异常:java.lang.ArrayIndexOutOfBoundsException: 5 
5 2 
6 异常:java.lang.ArithmeticException: / by zero  
7 3 
8 异常:java.lang.NullPointerException 

 

【解释说明】在本程序中,需要注意的是在方法中必须要声明可能发生的所有异常,同时在调用该方法的main方法中定义try/catch语句来捕获该异常。

面试题6  正确的异常声明方式

考题题干

TimedOutException不是一个RuntimeException,下面的哪些选项载入程序中后,使程序可以正常运行:

A.public void fina()
B.public void fina() throws Exception
C.public void fina() throws TimedOutException
D.public void fina() throw TimedOutException
E.public throws TimedOutException void fina()

试题分析

通过前面的学习可以了解到,如果一个程序在运行的过程中有异常发生,而这个异常又不是RuntimeException或者Error,那么程序必须对这个异常进行捕获处理或者声明抛出(throws)该异常,捕获异常可以使用try-catch或try-catch- finally语句,而声明异常则是在声明方法的同时将会发生的异常进行声明,即在方法的后面加上抛出异常的类型如TimedOutException,抛出多个异常时在各异常间使用逗号","分隔。

本题中的程序在运行时抛出的不是一个RuntimeException,所以系统不会自动处理,那么就只好靠开发者捕获异常或者声明异常,本题主要考查的是如何在方法中声明抛出异常,所以在A选项中没有用关键字"throws"声明异常,故A选项是错误的;由于Exception是所有异常的父类,当然也可以代表TimedOutException了,故B选项是正确的;由于C选项符合了声明异常的语法格式,故C选项是正确的;在D选项中,因为"throw"是抛出异常而不是声明异常,所以关键字使用错误,故D选项是错误的;E选项中声明异常是在方法的后面,所以语法格式错误,故E选项是错误的。综合上述分析,正确答案是B和C。

参考答案

BC

转载自:http://book.51cto.com/art/200908/142901.htm

 

posted @ 2015-05-05 17:35  touchmore  阅读(231)  评论(0)    收藏  举报