|
||
5.3 抛出异常
|
||
在Java中可以通过throw语句重新抛出程序中已经处理过的异常或者人为地(故意)抛出任意异常,由于这种异常是人为所致,因此它可以抛出任意的异常,抛出的语句也可以放置在任何地方。其格式为: throw 异常对象; //重新抛出异常 若没有异常对象,可以利用异常类的构造方法直接创建一个异常类的对象,格式为: throw new 异常类名([ 实参列表 ]); //人为抛出异常 Java中大部分异常类都有一个默认的构造方法和一个字符串作为参数的构造方法,其中字符串参数传递的是该异常的描述信息,用getMessage()方法返回的就是该参数字符串。 【例5.6】重新抛出异常以及人为抛出异常。 1 //ThrowExceptionTest.java 2 public class ThrowExceptionTest 3 { 4 void func1() throws Exception 5 { 6 try 7 { 8 System.out.println("exception in func1"); 9 int c=5/0; 10 System.out.println("c="+c); 11 } 12 catch(Exception e) 13 { 14 System.out.println("catch exception"); 15 //throw e; 16 } 17 } 18 public static void main(String[] args) 19 { 20 ThrowExceptionTest test=new ThrowExceptionTest(); 21 try 22 { 23 test.func1(); 24 } 25 catch(Exception e) 26 { 27 System.out.println("catch func1 exception in main"); 28 System.out.println("func1 exception getMessage()="+e.getMessage()); 29 } 30 try 31 { 32 throw new Exception(); 33 //throw new Exception("人为抛出异常"); 34 } 35 catch(Exception e) 36 { 37 System.out.println("catch throw exception"); 38 System.out.println("exception getMessage()="+e.getMessage()); 39 } 40 } 41 } 编译运行该程序,运行结果如图5.7所示,尽管func1()方法中存在异常,但func1()方法中使用try……catch语句进行了捕获处理,因此在main()方法中并不能捕获到func1()中产生的异常。此外由于第32行使用默认构造方法创建的异常类对象,因此在第38行使用getMessage()方法不能获取任何信息。 图5.7 程序运行结果 图5.8程序运行结果 |