2014年计算机二级JAVA解析:Java的\异常\3

考试站(www.examzz.com)   【考试站:中国教育考试第一门户】   2014年4月14日
2014年计算机二级JAVA解析:Java的\异常\3 8.7throw语句

  throw语句用来明确地抛出一个\"异常\"。首先,你必须得到一个Throwable的实例的控制柄,通过参数传到catch子句,或者用new操作符来创建一个。下面是throw语句的通常形式。

  throwThrowableInstance;

  程序会在throw语句后立即终止,它后面的语句执行不到,然后在包含它的所有try块中从里向外寻找含有与其匹配的catch子句的try块。下面是一个含有throw语句的例子。

  classThrowDemo{staticvoiddemoproc() {try{thrownewNullPointerException(\"de3mo\");}catch(NullPointerExceptione){System.out.println(\"caughtinsidedemoproc\");throwe;}}publicstaticvoidmain(Stringargs[]){try{demoproc();}

  catch(NullPointerExceptione){system.out.println(\"recaught:\"+e);}}}

  8.8throws语句

  throws用来标明一个成员函数可能抛出的各种\"异常\"。对大多数Exception子类来说,Java编译器会强迫你声明在一个成员函数中抛出的\"异常\"的类型。如果\"异常\"的类型是Error或RuntimeException,或它们的子类,这个规则不起作用,因为这?copy;在程序的正常部分中是不期待出现的。如果你想明确地抛出一个RuntimeException,你必须用throws语句来声明它的类型。这就重新定义了成员函数

  的定义语法:typemethod-name(arg-list)throwsexception-list{}

  下面是一段程序,它抛出了一个\"异常\",但既没有捕捉它,也没有用throws来声明。这在编译时将不会通过。

  classThrowsDemo1{staticvoidprocedure()[System.out.println(\"inside

  procedure\");thrownewIllegalAccessException(\"demo\");}publicstatic

  voidmain(Stringargs[]){procedure();}}

  为了让这个例子编译过去,我们需要声明成员函数procedure抛出了IllegalAccessException,并且在调用它的成员函数main里捕捉它。下面是正确的例子:

  classThrowsDemo{staticvoidprocedure()throwsIllegalAccessException

  {System.out.println(\"insideprocedure\");thrownew

  IllegalAccessException(\"demo\");}publicstaticvoidmain(Stringargs[])

  {try{procedure();}catch(IllegalAccessExceptione)

  {System.out.println(\"caught\"+e);}}}

  下面是输出结果:

  C:\\>javaThrowsDemoinsideprocedurecaught

  java.lang.IllegalAccessException:demo


相关文章