Java 異常処理_第1頁
Java 異常処理_第2頁
Java 異常処理_第3頁
Java 異常処理_第4頁
Java 異常処理_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、第七章 異常處理本章導(dǎo)讀對(duì)于計(jì)算機(jī)程序來說,錯(cuò)誤和異常都是不可避免的。Java提供了豐富的錯(cuò)誤及異常情況處理措施,對(duì)各種可能出現(xiàn)的異常都作了充分的考慮,可以說,從沒有哪一種語言象Java這樣對(duì)異??紤]的這樣周全。作為一門面向?qū)ο笳Z言,Java把它對(duì)異常的處理都封裝到類里。在本章中,您將學(xué)習(xí)到以下關(guān)于異常處理的內(nèi)容:l Java中異常處理的方式l Java中的異常類l 如何拋出異常l 如何捕獲并處理異常如果您用過C+,您會(huì)對(duì)Java的異常處理感到非常熟悉。下面我們就來介紹它。7.1出錯(cuò)處理在程序運(yùn)行的過程中,存在著這樣那樣的發(fā)生錯(cuò)誤的可能。這些錯(cuò)誤可能是由于包含不合法的信息的文件所造成的,可能是

2、由于不穩(wěn)定的網(wǎng)絡(luò)連接造成的,或者是數(shù)組越界存取,還可能是因?yàn)橥龍D使用空引用來引用對(duì)象。當(dāng)這些錯(cuò)誤發(fā)生時(shí),我們通常希望程序能夠智能的處理這些錯(cuò)誤,而不會(huì)導(dǎo)致系統(tǒng)的崩潰或數(shù)據(jù)的丟失,例如我們希望程序在錯(cuò)誤發(fā)生之后能夠做到:l 返回一個(gè)正常的狀態(tài)從而可以繼續(xù)執(zhí)行其它的命令;或者l 允許用戶保存他們的數(shù)據(jù),然后放心的關(guān)閉程序。我們的愿望是好的,但是往往事違人愿。通常當(dāng)系統(tǒng)檢測到錯(cuò)誤發(fā)生時(shí),程序已經(jīng)“病入膏肓”了,不能再返回到正常的狀態(tài),也無法恢復(fù)已經(jīng)破壞了的數(shù)據(jù)。因此錯(cuò)誤處理的任務(wù)就是將錯(cuò)誤從發(fā)生地傳遞到能夠處理它的地方。要想在程序中處理錯(cuò)誤,就需要了解一下到底可能發(fā)生哪些錯(cuò)誤。我們概括一下,程序中可

3、能出現(xiàn)以下錯(cuò)誤:l 用戶輸入錯(cuò)誤比如用戶輸入了錯(cuò)誤的數(shù)據(jù)格式,這時(shí)您需要在程序中處理它,通常這種錯(cuò)誤比較容易處理,而且不會(huì)對(duì)系統(tǒng)造成“滅頂之災(zāi)”。l 設(shè)備錯(cuò)誤指硬件不能正常工作的錯(cuò)誤,比如打印機(jī)不工作,串口找不到,甚至硬盤損壞。這種錯(cuò)誤有些很致命。l 物理限制導(dǎo)致的錯(cuò)誤比如磁盤空間滿,內(nèi)存不足。l 代碼錯(cuò)誤方法不能被正確的執(zhí)行。這類錯(cuò)誤是最常見的錯(cuò)誤,比如數(shù)組越界訪問,除零錯(cuò)誤等。有些錯(cuò)誤是能夠檢查出來的或者可以預(yù)見的,比如因?yàn)槌绦虼a本身的原因造成的錯(cuò)誤,這些錯(cuò)誤在經(jīng)過程序員的仔細(xì)檢查之后,在理論上是有可能避免的。然而還有一些錯(cuò)誤是不可預(yù)測的,比如內(nèi)存不足,文件操作的錯(cuò)誤等等。這種錯(cuò)誤不是程

4、序本身的錯(cuò)誤,是和程序運(yùn)行的環(huán)境有關(guān)系的。在傳統(tǒng)的非面向?qū)ο蟮木幊陶Z言中,錯(cuò)誤處理的任務(wù)全在程序員身上,程序員必須考慮在程序中可能出現(xiàn)的種種問題,并且自行決定如何處理這些問題。這樣做有兩個(gè)缺點(diǎn),一是編程人員的負(fù)擔(dān)過重,二是出錯(cuò)處理不規(guī)范,每個(gè)程序員都有自己的一套處理錯(cuò)誤的習(xí)慣,這樣就不利于程序員之間的合作,而且降低了程序的可讀性。在傳統(tǒng)的錯(cuò)誤處理中,通常采用返回一個(gè)特定錯(cuò)誤代碼值的方式來標(biāo)識(shí)錯(cuò)誤,并由它的調(diào)用者來處理錯(cuò)誤,這樣對(duì)于調(diào)用者和被調(diào)用者來說都很麻煩。如果調(diào)用者不能處理這個(gè)錯(cuò)誤還需要向它的上一級(jí)傳遞,這樣當(dāng)在調(diào)用者中可能出現(xiàn)兩個(gè)錯(cuò)誤的時(shí)候,這種傳遞方式就會(huì)變得非常笨拙;而且調(diào)用者有的時(shí)

5、候會(huì)懶于處理這些錯(cuò)誤而聽之任之,從而種下了錯(cuò)誤的隱患;另外,這種處理方式將程序的正常執(zhí)行的代碼和處理錯(cuò)誤的代碼混雜在一起,降低了程序的可讀性。當(dāng)然,這種方法還是有一定的作用的,在Java中,有些地方仍然沿襲了這種傳統(tǒng)的處理方法,比如某些I/O操作,如果失敗了,就會(huì)返回一個(gè)空引用null。在Java中使用異常為程序提供了一種有效的錯(cuò)誤處理的方式,使得方法的異常中止和錯(cuò)誤處理有了一個(gè)清晰的接口。異常處理的方式和傳統(tǒng)的方式有所不同,它的基本處理方式是:當(dāng)一個(gè)方法引發(fā)一個(gè)異常之后,可以將異常拋出,由該方法的直接或間接調(diào)用者處理這個(gè)異常。這就是我們常說的catch-throw(捕獲-拋出)方式。這種處理

6、方式使得錯(cuò)誤的處理變得規(guī)范化,程序員可以用一致的方式來處理錯(cuò)誤。7.2異常類Java是一門面向?qū)ο蟮木幊陶Z言,因此,異常在Java中也是作為類的實(shí)例的形式出現(xiàn)的。Java中的所有的異常類都是從Throwable類派生出來的。圖7-1是Java中異常的類層次圖。圖7-1 Java中異常類的層次圖從圖7-1可以看到,Throwable類有兩個(gè)直接子類Error和Exception。Error類及其子類主要用來描述一些Java運(yùn)行時(shí)刻系統(tǒng)內(nèi)部的錯(cuò)誤或資源枯竭導(dǎo)致的錯(cuò)誤,普通的程序不能從這類錯(cuò)誤中恢復(fù)。您不能拋出這種類型的錯(cuò)誤。這類錯(cuò)誤出現(xiàn)的幾率是很小的。另一個(gè)異常類的分支是Exception類和它的

7、子類們。在編程中,您對(duì)錯(cuò)誤的處理主要是對(duì)這類錯(cuò)誤的處理。類Exception是普通程序可以從中恢復(fù)的所有標(biāo)準(zhǔn)異常的超類。Exception類又有兩個(gè)分支從RuntimeException中派生出來的類和不是從RuntimeException類中派生的類,這樣分類的根據(jù)是錯(cuò)誤發(fā)生的原因。RuntimeException是程序員編寫程序不正確所導(dǎo)致的異常;而其它的異常則是由于一些異常的情況造成的,不是程序本身的錯(cuò)誤,如果這些異常情況沒有發(fā)生,程序本身仍然是好程序。RuntimeException類的錯(cuò)誤又包括:l 錯(cuò)誤的強(qiáng)制類型轉(zhuǎn)換l 數(shù)組越界訪問l 空指針操作其它異常(非RuntimeExcep

8、tion類的異常)比如:l 文件指針越界l 格式不正確的URLl 試圖為一個(gè)不存在的類找到一個(gè)代表它的Class類的對(duì)象RuntimeException類的異常的產(chǎn)生是程序員的過失,理論上,程序員經(jīng)過檢查和測試可以查出這類錯(cuò)誤。7.3在方法中聲明異常在第五章講到方法的聲明時(shí)候,我們提到了方法聲明中的throws子句。在throws子句中,可以聲明方法中可能出現(xiàn)的異常。這樣,方法就可以告訴編譯器它可能會(huì)產(chǎn)生哪些異常,從而要求它的使用者必須考慮對(duì)處理這些異常,這樣就使異常及時(shí)得到處理,減少了程序崩潰的幾率。在下列幾種情況下,Java可能會(huì)拋出異常:1. 調(diào)用的方法拋出了異常。2. 檢測到了錯(cuò)誤并使

9、用throw 語句拋出異常。3. 程序代碼有錯(cuò)誤,從而導(dǎo)致異常,比如數(shù)組越界錯(cuò)誤。4. Java運(yùn)行時(shí)刻系統(tǒng)產(chǎn)生內(nèi)部錯(cuò)誤。當(dāng)前兩種異常發(fā)生時(shí),您應(yīng)該告訴使用您的方法的人,您的方法強(qiáng)迫Java拋出異常。因?yàn)槿魏螔伋霎惓5姆椒ǘ际菍?dǎo)致程序死亡的陷阱,如果沒有任何代碼來處理方法拋出的異常,就會(huì)導(dǎo)致程序的結(jié)束。在Java中,內(nèi)置了異常的處理,在方法的聲明中,可以指定方法中可能產(chǎn)生的異常。例如:class Test.public StringgetInput() throws IOException.如果一個(gè)方法可能拋出的異常不止一個(gè),可以在方法的throws子句中聲明多個(gè)異常,這些異常使用逗號(hào)“,”隔

10、開。例如:class Animationpublic Image loadImage(String s) throws EOFException, MalformURLException.并不是所有可能發(fā)生的異常都要在方法的聲明中指定,從Error類中派生出的異常和從RuntimeException類中派生的異常就不用在方法聲明中指定。這兩類異常屬于不檢查異常(unchecked exception)。Java中的另一類異常是檢查異常(checked exception)。檢查異常是那些在程序中您應(yīng)該處理的異常,而不檢查異常則是哪些您無法干預(yù)的異常(如Error類異常)或者完全在您的控制之下,

11、您完全可以避免的異常(比如數(shù)組越界錯(cuò)誤)。而方法的聲明中必須指明所有可能發(fā)生的檢查異常。方法實(shí)際拋出的異常可能是throws子句中指定的異常類或其子類的實(shí)例。比如在方法的聲明中指明方法可能產(chǎn)生IOException,但是實(shí)際上可能拋出的異?;蛟S是EOFException類的實(shí)例,這些異常類都是IOException的子類。當(dāng)子類的方法覆蓋了超類的方法時(shí),子類方法的throws子句中聲明的異常不能多于超類方法中聲明的異常,否則會(huì)產(chǎn)生編譯錯(cuò)誤。因此,如果超類的方法沒有throws子句,那么子類中覆蓋它的方法也不能使用throws子句指明異常。對(duì)于接口,情況相同。7.4拋出異常您可以在程序中使用th

12、row語句(注意,這里是throw而不是throws)來拋出異常。throw語句的形式為:throw某異常類的實(shí)例程序清單7-1是一個(gè)拋出異常的說明性的范例。程序清單7-1import java.io.IOException;public class ThrowExceptionpublic static void main(String args)tryString s = getInput();System.out.println(s);catch(IOException e)System.out.println(e.getMessage();static String getInput(

13、) throws IOExceptioncharbuffer = new char20;int counter = 0;boolean flag = true;while(flag)buffercounter = (char)System.in.read();if (buffercounter='n')flag = false;counter+;if (counter>=20)IOException ae = new IOException("buffer is full");throw ae;return new String(buffer);在程序

14、清單7-1中,我們聲明了一個(gè)方法getInput(),用來獲取從鍵盤輸入的字符,并以字符串對(duì)象的形式返回。我們還規(guī)定,從鍵盤輸入的字符數(shù)不能多于20個(gè),否則就拋出一個(gè)IOException異常。由于在方法getInput()中,可能會(huì)產(chǎn)生IOException異常,所以在方法的聲明中必須指明這個(gè)異常:static String getInput() throws IOException在方法getInput()中,可能產(chǎn)生異常的地方有兩處,一是Java的InputStream類的read()方法。InputStream類的read()方法的方法頭如下所示:public abstract int

15、 read() throws IOException但是在方法getInput()中,我們并沒有捕獲和處理這個(gè)異常:另一個(gè)可能產(chǎn)生異常的地方是方法中的while循環(huán):while(flag)if (buffercounter='n')flag = false;counter+;if (counter>=20)IOException ae = new IOException("buffer is full");throw ae;在這個(gè)循環(huán)中,如果輸入的字符數(shù)大于20,我們就拋出一個(gè)IOException異常(這里只是作為拋出異常的一個(gè)示范,實(shí)際上這并不是I

16、OException異常)。在方法main中,我們捕獲這個(gè)異常,并打印出異常的信息。如果沒有異常發(fā)生,就打印出我們得到的輸入字符串。運(yùn)行程序清單7-1,如果我們輸入如下字符:Wang Haifeng將會(huì)得到如下的輸出結(jié)果:Wang Haifeng而如果我們輸入超過20個(gè)字符:Somebody said: There is something就會(huì)得到一個(gè)異常信息:buffer is full由上可見,拋出異常無非就是一個(gè)三步曲:1. 確定異常類2. 創(chuàng)建異常類的實(shí)例3. 拋出異常一旦Java拋出了異常,方法不會(huì)被返回調(diào)用者,因此您不必?fù)?dān)心返回值的問題,也不必提供一個(gè)缺省的返回值。您除了可以拋出J

17、ava類庫中已有的異常,還可以自己定義異常類,并且拋出自己定義的異常。從Exception類或其子類中派生出您自己的異常類;在程序中需要的地方創(chuàng)建此異常類的實(shí)例并拋出即可。如程序清單7-2所示。程序清單7-2public class ThrowMyExceptionpublic static void main(String args)trytestMyException("My own exception");catch(Exception e)System.out.println(e.getMessage();static void testMyException(St

18、ring s) throws Exception/because of something wrong, an exception is thrown out.throw new MyException(s);class MyException extends ExceptionMyException()MyException(String info)super(info);運(yùn)行此程序,將打印出異常信息:My own exception這是在創(chuàng)建異常實(shí)例的時(shí)候從構(gòu)造方法中傳遞的信息。從這個(gè)例子中可見,創(chuàng)建自己的異常類是多么簡單。此外,在方法testMyException的throws子句中,聲

19、明可能拋出的異常是Exception類的實(shí)例,而實(shí)際上是其子類MyException的實(shí)例,我們看到這樣做是允許的。7.4 捕獲異常上一節(jié)您已經(jīng)學(xué)習(xí)了如何拋出異常。異常的拋出是很簡單的,只要遵循教條化的三步曲就可以了。然而異常被拋出以后,應(yīng)該有相應(yīng)的處理它的代碼,否則,如果異常沒有被處理,那么程序就會(huì)被系統(tǒng)終止。捕獲異常并處理它要比拋出異常麻煩一些。為了捕獲異常,您需要使用try.catch語句。一種簡單的try.catch語句的形式如下:try/正常執(zhí)行的代碼.catch(異常類型 e)/這種類型的異常的處理代碼.在建立了try.catch塊之后,如果在try塊中的任何地方拋出在catch子

20、句中指定類型的異常,Java解釋器將跳過異常拋出處以后的代碼,而直接跳到catch子句中的異常處理代碼處開始執(zhí)行異常處理。如果在try塊中拋出的異常沒有能夠捕獲它的catch塊,則Java將立即退出這個(gè)方法;由于在方法的聲明中已經(jīng)指定了方法中可能產(chǎn)生的異常,所以在這個(gè)方法的調(diào)用者的代碼中已經(jīng)有了處理這種異常的代碼,這樣,這種類型的異常在此方法的調(diào)用者中得到了處理。調(diào)用者可能自己處理這種異常,也可能將這個(gè)異常放給它的調(diào)用者。異常就這樣逐級(jí)上溯,直到找到處理它的代碼為止。如果沒有任何代碼來捕獲并處理這個(gè)異常,Java將結(jié)束這個(gè)程序的執(zhí)行。程序清單7-3是一個(gè)捕獲異常的說明性的范例。程序清單7-3i

21、mport java.io.IOException;public class CatchExceptionpublic static void main(String args)testTryCatch();static void testTryCatch()trytrythrow new IOException("exception 1");/下面這條語句將產(chǎn)生編譯錯(cuò)誤,因?yàn)榫幾g器發(fā)現(xiàn)程序永遠(yuǎn)也執(zhí)行不到那里/System.out.println("Executing here?");catch(IOException e)System.out.prin

22、tln(e.getMessage();throw new IllegalAccessException("exception 2");catch(IllegalAccessException ie)System.out.println(ie.getMessage();編譯并運(yùn)行程序清單7-3,將產(chǎn)生如下的輸出結(jié)果:exception 1exception 2從此程序中也可以看出,trycatch塊允許嵌套。嵌套的trycatch塊的處理也很簡單。當(dāng)有異常拋出時(shí),Java將檢查異常拋出點(diǎn)所在的trycatch塊,看是否有能夠處理它的catch塊,如果有,則異常被此catch塊

23、所捕獲;否則,異常被轉(zhuǎn)到外層的trycatch塊處理。在程序清單7-3中,我們?cè)诜椒╰estTryCatch()中捕獲并處理了異常IOException和IllegalAccessException。然而,另外一種選擇是在方法testTryCatch()中并不處理此異常,而將異常留給這個(gè)方法的調(diào)用者去處理,這時(shí),您需要在方法testTryCatch()的throws子句中指明這個(gè)異常。程序清單7-4是程序清單7-3的改寫,它在方法的調(diào)用者那里捕獲并處理了異常。程序清單7-4import java.io.IOException;public class MethodThrowpublic sta

24、tic void main(String args)trytestTryCatch();catch(IOException ioe)System.out.println("IOException is caught.");catch(IllegalAccessException iae)System.out.println("IllegalAccessException is caught.");static void testTryCatch() throws IOException, IllegalAccessExceptionif(Math.ran

25、dom()>0.5)throw new IOException("exception 1");else throw new IllegalAccessException("exception 2");編譯并運(yùn)行程序清單7-4。由于我們?cè)诔绦蛑惺褂昧穗S機(jī)數(shù)作為控制變量,所以程序的輸出結(jié)果是不確定的,它可能是:IOException is caught.或IllegalAccessException is caught.在此程序中,方法testTryCatch()可能產(chǎn)生多種異常,所以在包含它的try塊中也有可能出現(xiàn)不止一種類型的異常;因此,與之相應(yīng),

26、該try塊也可以有多個(gè)catch子句,用來捕獲多種類型的異常。捕獲多種異常的try.catch語句的基本格式如下:try/正常執(zhí)行的代碼,可能產(chǎn)生異常.catch(異常類1 e)/異常類1的處理代碼.catch(異常類2 e)/異常類2的處理代碼.catch(異常類n e)/異常類n的處理代碼.在一個(gè)方法中究竟是捕獲異常,還是將這個(gè)異常向上傳遞給此方法的調(diào)用者去處理,這取決于您是否知道如何去處理這個(gè)異常。如果您知道如何處理這個(gè)異常,您就應(yīng)該在此方法內(nèi)將這個(gè)異?!熬偷亟鉀Q”;如果您不知道如何處理它,您應(yīng)該將這個(gè)異常留給它的調(diào)用者去處理,此時(shí)您需要在方法throws子句中指明這個(gè)異常。但是如果一個(gè)

27、類中的某個(gè)方法覆蓋了其超類中的方法,而超類中的方法的throws子句中沒有指明在子類的方法中可能產(chǎn)生的異常的類型,那么這類異常就必須在方法內(nèi)捕獲并處理,而不能留給其調(diào)用者處理。然而有的時(shí)候,您可能既希望在方法的內(nèi)部對(duì)某個(gè)異常做一些您所知道的處理,比如釋放某些資源,同時(shí)又希望方法的調(diào)用者能夠捕獲到并處理這個(gè)異常。這時(shí),您可以在異常的處理代碼中使用throw語句重新拋出異常。還有一種情況,您可能也希望在捕獲了一個(gè)異常之后重新拋出一個(gè)異常,那就是在您捕獲一個(gè)異常之后,您希望它作為另一個(gè)異常被方法的調(diào)用者處理。比如,您可能可以處理某些運(yùn)行時(shí)刻異常,這時(shí)您可以刻意的捕獲這個(gè)運(yùn)行時(shí)刻異常并重新拋出一個(gè)新的

28、異常供方法的調(diào)用者處理。運(yùn)行時(shí)刻異常屬于不檢查異常,如果您在方法的throws子句中聲明了運(yùn)行時(shí)刻異常,那么方法的調(diào)用者可以不處理此異常。所以,如果您要強(qiáng)迫方法的調(diào)用者處理某個(gè)運(yùn)行時(shí)刻異常,可以采用上述的迂回的方法捕獲運(yùn)行時(shí)刻異常、拋出一種檢查異常。程序清單7-5是一個(gè)捕獲異常之后重新拋出的例子。程序清單7-5public class IndirectThrowpublic static void main(String args)trytestRuntime();catch(MyArithException me)System.out.println("Handle runtime

29、 exception here.");static void testRuntime() throws MyArithExceptiontry/此處刻意產(chǎn)生一個(gè)除零錯(cuò)的異常int i,j;j = 0;i = 1/j;catch(ArithmeticException ae)/在這里捕獲運(yùn)行時(shí)刻異常ArithmeticException/不作任何處理,只是重新拋出一個(gè)新異常MyArithException/因?yàn)檫\(yùn)行時(shí)刻異常不在方法聲明的throws子句中聲明throw new MyArithException(ae.getMessage();class MyArithException

30、 extends ExceptionMyArithException()MyArithException(String msg)super(msg);此程序的運(yùn)行結(jié)果如下:Handle runtime exception here.在testRuntime()方法中,我們刻意制造了一個(gè)除零錯(cuò)異常,它屬于ArithmeticException異常類,而ArithmeticException類是RuntimeException類的子類。在方法聲明的throws子句中,我們并沒有聲明ArithmeticException或RuntimeException,而是聲明了自己的一個(gè)異常類MyArithEx

31、ception。這樣,方法testRuntime()的調(diào)用者就不得不處理這個(gè)異常。在testRutime()方法內(nèi)的trycatch塊中,我們捕獲了除零錯(cuò)的異常,但是在catch塊中沒有對(duì)它進(jìn)行任何處理,而只是重新拋出了一個(gè)MyArithException類的異常。7.5 finally子句當(dāng)Java程序拋出一個(gè)異常的時(shí)候,它會(huì)停止處理這個(gè)方法中剩下的代碼,而尋找捕獲異常的catch子句或者直接不正常退出方法。這樣,如果在方法中已經(jīng)分配了一些資源,或者打開了文件,在產(chǎn)生異常后就不會(huì)釋放資源或關(guān)閉文件。前面我們已經(jīng)介紹了一種解決辦法,即捕獲這個(gè)異常,在處理代碼中釋放這些資源,然后在重新拋出異常。

32、但是這樣做有兩個(gè)缺點(diǎn):1. 需要程序員在兩個(gè)地方書寫同樣的代碼,以保證無論程序正常結(jié)束還是由于產(chǎn)生異常而不正常結(jié)束都會(huì)執(zhí)行這段做清除工作的代碼。2. 在異常處理中寫這些代碼,又將正常代碼和錯(cuò)誤處理的代碼混在了一起。因此,這樣做會(huì)導(dǎo)致程序冗余而且結(jié)構(gòu)不清晰。Java中考慮到了這一點(diǎn),提供了更好的處理辦法,那就是使用finally子句。finally子句的形式如下:try/正常執(zhí)行的代碼,可能產(chǎn)生異常.catch(異常類1 e)/異常類1的處理代碼.catch(異常類2 e)/異常類2的處理代碼.catch(異常類n e)/異常類n的處理代碼.finally/執(zhí)行清除工作的語句.無論在try塊中是否產(chǎn)生異常,也不管產(chǎn)生的異常是否會(huì)被捕獲,finally中的語句最終都會(huì)被執(zhí)行。具體的講,在以下情況下finally子句中的語句將會(huì)被執(zhí)行:l try塊中的語句沒有產(chǎn)生異常。在這種情況下,Java首先執(zhí)行try塊中的所有的語句,然后執(zhí)行finally子句中的代碼,最后執(zhí)行try.catch.finally塊后面的語句。l try塊中的語句產(chǎn)生了異常,而且此異常在方法內(nèi)被捕獲。在這種情況下,Java首先執(zhí)行try塊中的語句,直到產(chǎn)生異常處,然后跳過此try塊中剩下的語句,執(zhí)行捕獲此異常的catch子句的處理代碼;然后執(zhí)行finally子句中的代碼。如果catch子句中沒有重

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論