關燈 巨大 直達底部
親,雙擊螢幕即可自動滾動
第9部分

main(Stringargs''){try{inta=args。length;system。out。println(”a

=”+a);intb=42/a;procedure();}catch(arithmeticExceptione)

{System。out。println(”divby0:”+e);}}}

成員函式procedure裡有自己的try/catch控制,所以main不用去處理ArrayIndexOutOfBoundsException。

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