Thinking in Java 3 Edition Throwable. getMessage()方法。对于异常类来说, getMessage()有点像 tostring()。 由于异常同其它对象没什么两样,所以你可以不断地用这种方法来增强这 种自定义的异常类。但是要记住,当你把这些 package交给客户程序员 的时候,他们很可能会把这些“浇头”全给扔掉,因为他们可能只是单纯 地找到这个抛出的异常,其它什么都不管。(绝大多数的Java类库中的异 常都是这么用的。) 异常说明 java鼓励你告诉那些调用你方法的客户程序员们,你定义的方法可能会 抛出哪种异常。这是一种很友好的做法,因为这么一来,调用方法的人就 能知道应该写什么样的代码来捕捉潜在的异常了。当然,如果可以得到源 代码的话,客户程序员可以通过査找 throw语句来发现这点,但通常情 况下,他们是得不到类库的源代码的。为了应付这种情况,Java在语法 上提供了支持(同时也是强制你必须使用这种语法),能让你很礼貌地告诉 客户程序员们,这个方法能抛出什么异常,这样客户程序员就能自行处理 了。这就是“异常说明( exception specification)”,它属于方法声明 的一部分,要列在在参数表的后面 异常说明要用 throws关键词,后面再跟上所有可能抛出的异常类型的 清单。所以方法的定义可能会是这样: void f( throws TooBig, TooSmall, Divzero / 如果是 void f(// 这就意味着这个方法不会抛出任何异常(除非是继承自 Runtime Exception的异常,这类异常不需要异常说明就可以从任何 地方抛出——这一点我们以后会讲)。 你不能对异常说明撒谎。如果你的方法产生一个异常但又不作处理,那么 编译器就会提醒你,要么处理这个异常,要么在异常说明部分指明这个方 法会抛出这个异常。通过强化这种从顶层到底层的异常说明,Java提供 了一定程度的在编译时纠正异常的保障 不过还是有个能撒谎的地方:你可以声称方法会抛出一个实际上并不会抛 出的异常。编译器会当真的,它会要求客户程序员像真的会抛出异常那样 第9页共9页 www.wgqqh.com/shhgs/tij.html email:shhgs@sohu.comThinking in Java 3 rd Edition ✞ 9 ✟ ✠ 9 ✟ www.wgqqh.com/shhgs/tij.html email:shhgs@sohu.com Th rowable. getM essage( )@n÷kèZ`a# getM essage( )-¯ô toString( ) ÂkèZU9÷`ÀzO#,S±SR?@n`ûÒR ?e:èZ+;#F±R2 packag e J ú%& "#:ä'~R2 J #Æ:'5o eR\LèZ#U9.ò(¤Ï[Q Java !è Z.R) Java ±0K2º±@n ú%&:#±e:@n'~ Lã?èZR^?ämn#ÆR^`#º@n 'LM+O `èZ
Fx#¶·Sî ¿# ú%&S<=¨e th row X¹`01R¯#+<Z «#:î
R?«#Java Xn g;
¬($Ò2±R?Xn)#'B±ä0 ú%&:#R\@n'LèZ#RO ú%& '78
R èZaü (exception specification)#9jk@nü ^>'#;Qøy èZaü; th rows õ#yþªg,-'LèZÐ o,S@ne:'~ROÊ void f() throws TooBig, TooSmall, DivZero { //... ¶· void f() { // ... R âûR\@n~LýèZ (M?É Ru ntim eException èZ#RèZ;èZaü Sbý @LR^¯£:Sy~%) ±'÷èZaü¶·±@n©ü^\èZ+R»78#K !1 ~±#;78R\èZ#;èZaü>'ÅüR\@ n~LR\èZ<=ÒÛR?bKKèZaü#Java ;
^e% ! PèZ× =³-\'@ʱS"@n~L^\ãgi~L èZ !1~F!#9~;3 ú%&ô!~LèZKO