|
|
51CTO旗下网站
|
|
移动端

16.2.5 异常处理语句的语法规则

《Java逍遥游记》第16章异常处理,本章将介绍Java语言提供的完善的异常处理机制。正确运用这套机制,有助于提高程序的健壮性。所谓程序的健壮性,就是指程序在多数情况下能够正常运行,返回预期的正确结果;如果偶尔遇到异常情况,程序也能采取周到的解决措施。本节为大家介绍异常处理语句的语法规则。

作者:孙卫琴来源:电子工业出版社|2010-09-26 17:21

16.2.5  异常处理语句的语法规则

异常处理语句主要涉及到try、catch、finally、throw和throws关键字,要正确使用它们,就必须遵守必要的语法规则。

(1)try代码块不能脱离catch代码块或finally代码块而单独存在。try代码块后面至少有一个catch代码块或finally代码块。以下代码会导致编译错误:

  1. public static void main(String args[])throws SpecialException{  
  2.   try{  
  3.     new Sample().methodA(-1);  
  4.     System.out.println("main");  
  5.   }  //编译错误,不允许出现孤立的try代码块  
  6.  
  7.   System.out.println("Finally");  

(2)try代码块后面可以有零个或多个catch代码块,还可以有零个或至多一个finally代码块。

(3)try代码块后面可以只跟finally代码块,例如:

  1. public static void main(String args[])throws SpecialException{  
  2.   try{  
  3.     new Sample().methodA(-1);  
  4.     System.out.println("main");  
  5.   }finally{  
  6.     System.out.println("Finally");  
  7.   }  

(4)当try代码块后面有多个catch代码块,Java虚拟机会把实际抛出的异常对象依次和各个catch代码块声明的异常类型匹配,如果异常对象为某个异常类型或其子类的实例,就执行这个catch代码块,不会再执行其他的 catch代码块。在以下代码中, code1语句抛出FileNotFoundException异常,FileNotFoundException类是IOException类的子类,而IOException类是Exception的子类。Java虚拟机先把FileNotFoundException对象与IOException类匹配,因此,当出现FileNotFoundException时,程序的打印结果为"IOException":

  1. try{  
  2.   code1;  //可能抛出FileNotFoundException  
  3. }catch(SQLException e){  
  4.   System.out.println("SQLException");  
  5. }catch(IOException e){  
  6.   System.out.println("IOException");  
  7. }catch(Exception e){  
  8.   System.out.println("Exception");  

在以下程序中,如果出现FileNotFoundException,打印结果为"Exception",因为FileNotFoundException对象与Exception类匹配:

  1. try{  
  2. code1;  //可能抛出FileNotFoundException  
  3. }catch(SQLException e){  
  4. System.out.println("SQLException");  
  5. }catch(Exception e){  
  6. System.out.println("Exception");  

(5)如果一个方法可能出现受检查异常,要么用try-catch语句捕获,要么用throws子句声明将它抛出,否则会导致编译错误。关于受检查异常的概念参见本章第16.3.2节(受检查异常)。以下method1()方法声明抛出IOException,它是受检查异常,其他方法调用method1()方法:

  1. void method1() throws IOException{}  //合法  
  2.  
  3. //编译错误,必须捕获或声明抛出IOException  
  4. void method2(){  
  5.   method1();  
  6. }  
  7.  
  8. //合法,声明抛出IOException  
  9. void method3()throws IOException {  
  10.   method1();  
  11. }  
  12.  
  13. //合法,声明抛出Exception,IOException是Exception的子类  
  14. void method4()throws Exception {  
  15.   method1();  
  16. }  
  17.  
  18. //合法,捕获IOException  
  19. void method5(){  
  20.  try{  
  21.     method1();  
  22.  }catch(IOException e){…}  
  23. }  
  24.  
  25. //编译错误,必须捕获或声明抛出Exception  
  26. void method6(){  
  27.   try{  
  28.     method1();  
  29.   }catch(IOException e){throw new Exception();}  
  30. }  
  31.  
  32. //合法,声明抛出Exception  
  33. void method7()throws Exception{  
  34.  try{  
  35.   method1();  
  36.  }catch(IOException e){throw new Exception();}  

判断一个方法可能会出现异常的依据如下:

方法中有throw语句。例如,以上method7()方法的catch代码块有throw语句。

调用了其他方法,其他方法用throws子句声明抛出某种异常。例如,method3()方法调用了method1()方法,method1()方法声明抛出IOException,因此,在method3()方法中可能会出现IOException。

【责任编辑:云霞 TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

SQL实用简明教程(第2版)

SQL(结构化查询语言)是数据库系统的通用语言,利用它可以用几乎同样的语句在不同的数据库系统上执行同样的操作,在数据库系统的开发中有着...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊