throws

在java中,有很多時候會因為自己的不小心,寫的程式會有一些異常出現,但是,我們自己可能難以發現其中的問題。於是就出現了異常處理。平常我們會用try catch finally來處理異常,但是,有時候,我們可能想把這個異常交給調用它的程式處理,那么,在這個時候,我們就會用到throws把異常情況拋給調用它的程式去處理這個程式出現的異常情況。

throws簡介

throws總是出現在一個函式頭中,用來標明該成員函式可能拋出的各種異常。對大多數Exception子類來說,Java編譯器會強迫你聲明在一個成員函式中拋出的異常的類型。如果異常的類型是Error或RuntimeException,或它們的子類,這個規則不起作用,因為這在程式的 正常部分中是不期待出現的。如果你想明確地拋出一個RuntimeException,你必須用throws語句來聲明它的類型。

與throw對比

關鍵字:throwthrow是一種控制程式流程的特殊方法而已。沒有相應的catch的話,可以中止當前的方法繼續執行。
關鍵字:throws聲明方法時候,如果不聲明throws的話,那么一般的Exception都要在這個方法中終結,也就是說一定要有相應的catch處理,否則編譯時會產生錯誤。如果方法聲明了throws的話,可以交給上一級方法去處理。以此類推。但是有些Exception可以不加捕捉,編譯也會通過。繼承Exception類,可以自己定義Exception,對於特定的狀態,用throw拋出專用的例外。這對於特定的middleware開發,有一定幫助。
throws用於聲明,它並不是一個可以執行的語句。throws放在方法聲明的後面部分,用來說明這個方法可能會拋出什麼異常,
staticvoidthrowOne()throwsIllegalAccessException
這個聲明告訴調用者,方法throwOne可能會拋出IllegalAccessException異常。
格式是:方法聲明throws異常類1,異常類2,...
而throw則是一個動作,執行throw語句的時候會拋出一個異常。
關鍵字:try、catch用個形象的比喻,如果說throws相當於職業介紹中介的話,那try和catch就是一對倒霉的打工仔。很有意思,throws只是告訴編譯器--方法可能產生的異常問題,然後把問題處理拋給trycatch。他們一個負責發現異常關係,一個負責異常捕獲。很辛苦的一對難兄難弟喔,:)

程式實例

classThrowsDemo{
staticvoidthrowOne(){
System.out.println("InsidethrowOne.");
thrownewIllegalAccessException("demo");
}
publicstaticvoidmain(Stringargs[]){
throwOne();
}
}
為編譯該程式,需要改變兩個地方。第一,需要聲明throwOne()引發IllegalAccessException異常。第二,main()必須定義一個try/catch語句來捕獲該異常。
正確的例子如下:
classThrowsDemo{
staticvoidthrowOne()throwsIllegalAccessException{
System.out.println("InsidethrowOne.");
thrownewIllegalAccessException("demo");
}
publicstaticvoidmain(Stringargs[]){
try{
throwOne();
}catch(IllegalAccessExceptione){
System.out.println("Caught"+e);
}
}
}
下面是例題的輸出結果:
insidethrowOne
caughtjava.lang.IllegalAccessException:demo

相關詞條

相關搜尋

熱門詞條

聯絡我們