資源描述:
《scjp培訓(xùn)第七章java異?!酚蓵?huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、第七章異常本模塊講述建立在Java編程語(yǔ)言中的錯(cuò)誤處理裝置。第一節(jié)相關(guān)問(wèn)題討論—下述問(wèn)題與本模塊中的材料相關(guān):-在大部分編程語(yǔ)言中,如何解決運(yùn)行時(shí)錯(cuò)誤?第二節(jié)目的本模塊學(xué)習(xí)結(jié)束后,能夠:-定義異常-使用try,catch和finally語(yǔ)句-描述異常分類(lèi)-開(kāi)發(fā)程序來(lái)處理自己的異常第三節(jié)異常異常異常類(lèi)定義程序所遇到的輕微錯(cuò)誤發(fā)生下列情況時(shí),會(huì)出現(xiàn)異常:想打開(kāi)的文件不存在網(wǎng)絡(luò)連接中斷受控操作數(shù)超出預(yù)定范圍非常感興趣地正在裝載的類(lèi)文件丟失錯(cuò)誤類(lèi)定義嚴(yán)重的錯(cuò)誤條件7.3.1介紹什么是異常?在Java103編程語(yǔ)言中,異常類(lèi)定義程序中可能遇到的輕微的錯(cuò)誤條件??梢詫?xiě)代
2、碼來(lái)處理異常并繼續(xù)程序執(zhí)行,而不是讓程序中斷。在程序執(zhí)行中,任何中斷正常程序流程的異常條件就是錯(cuò)誤或異常。例如,發(fā)生下列情況時(shí),會(huì)出現(xiàn)異常:-想打開(kāi)的文件不存在-網(wǎng)絡(luò)連接中斷-受控操作數(shù)超出預(yù)定范圍-非常感興趣地正在裝載的類(lèi)文件丟失在Java編程語(yǔ)言中,錯(cuò)誤類(lèi)定義被認(rèn)為是不能恢復(fù)的嚴(yán)重錯(cuò)誤條件。在大多數(shù)情況下,當(dāng)遇到這樣的錯(cuò)誤時(shí),建議讓程序中斷。Java編程語(yǔ)言實(shí)現(xiàn)C++異常來(lái)幫助建立彈性代碼。在程序中發(fā)生錯(cuò)誤時(shí),發(fā)現(xiàn)錯(cuò)誤的方法能拋出一個(gè)異常到其調(diào)用程序,發(fā)出已經(jīng)發(fā)生問(wèn)題的信號(hào)。然后,調(diào)用方法捕獲拋出的異常,在可能時(shí),再恢復(fù)回來(lái)。這個(gè)方案給程序員一個(gè)寫(xiě)處理程
3、序的選擇,來(lái)處理異常。通過(guò)瀏覽API,可以決定方法拋出的是什么樣的異常。7.3.2實(shí)例考慮一下HelloWorld.java程序版本的簡(jiǎn)單擴(kuò)展,它通過(guò)信息來(lái)循環(huán):1.publicclassHelloWorld{2.publicstaticvoidmain(Stringargs[]){3.inti=0;4.5.Stringgreetings[]={6."Helloworld!",7."No,Imeanit!",8."HELLOWORLD!!"9.};10.11.while(i<4){12.System.out.println(greetings[i]);13.
4、i++;14.}15.}16.}正常情況下,當(dāng)異常被拋出時(shí),在其循環(huán)被執(zhí)行四次之后,程序終止,并帶有錯(cuò)誤信息,就象前面所示的程序那樣。1.c:student>javaHelloWorld2.Helloworld!3.No,Imeanit!4.HELLOWORLD!!5.java.lang.ArrayIndexOutOfBoundsException:36.atHelloWorld.main(HelloWorld.java:12)異常處理允許程序捕獲異常,處理它們,然后繼續(xù)程序執(zhí)行。它是分層把關(guān),因此,錯(cuò)誤情況不會(huì)介入到程序的正常流程中。特殊情況發(fā)生時(shí),在
5、與正常執(zhí)行的代碼分離的代碼塊中被處理。這就產(chǎn)生了更易識(shí)別和管理的代碼。103第四節(jié)異常處理Java編程語(yǔ)言提供了一個(gè)來(lái)考慮哪個(gè)異常被拋出以及如何來(lái)恢復(fù)它的機(jī)制。7.4.1try和catch語(yǔ)句try和catch語(yǔ)句1.try{2.//codethatmightthrowaparticularexception3.}catch(MyExceptionTypee){4.//codetoexecuteifaMyExceptionTypeexceptionisthrown5.}catch(Exceptione){6.//codetoexecuteifageneral
6、Exceptionexceptionisthrown7.}要處理特殊的異常,將能夠拋出異常的代碼放入try塊中,然后創(chuàng)建相應(yīng)的catch塊的列表,每個(gè)可以被拋出異常都有一個(gè)。如果生成的異常與catch中提到的相匹配,那么catch條件的塊語(yǔ)句就被執(zhí)行。在try塊之后,可能有許多catch塊,每一個(gè)都處理不同的異常。1.try{2.//codethatmightthrowaparticularexception3.}catch(MyExceptionTypee){4.//codetoexecuteifaMyExceptionTypeexceptionisthr
7、own5.}catch(Exceptione){6.//codetoexecuteifageneralExceptionexceptionisthrown7.}7.4.2調(diào)用棧機(jī)制如果方法中的一個(gè)語(yǔ)句拋出一個(gè)沒(méi)有在相應(yīng)的try/catch塊中處理的異常,那么這個(gè)異常就被拋出到調(diào)用方法中。如果異常也沒(méi)有在調(diào)用方法中被處理,它就被拋出到該方法的調(diào)用程序。這個(gè)過(guò)程要一直延續(xù)到異常被處理。如果異常到這時(shí)還沒(méi)被處理,它便回到main(),而且,即使main()不處理它,那么,該異常就異常地中斷程序??紤]這樣一種情況,在該情況中main()方法調(diào)用另一個(gè)方法(比如,fi
8、rst()),然后它調(diào)用另一個(gè)(比如,second(