![本模塊講述建立在Java編程語(yǔ)言中的錯(cuò)誤處理裝置_第1頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/4/8e47314c-6b3a-42dd-a126-3a58f6d1ea9c/8e47314c-6b3a-42dd-a126-3a58f6d1ea9c1.gif)
![本模塊講述建立在Java編程語(yǔ)言中的錯(cuò)誤處理裝置_第2頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/4/8e47314c-6b3a-42dd-a126-3a58f6d1ea9c/8e47314c-6b3a-42dd-a126-3a58f6d1ea9c2.gif)
![本模塊講述建立在Java編程語(yǔ)言中的錯(cuò)誤處理裝置_第3頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/4/8e47314c-6b3a-42dd-a126-3a58f6d1ea9c/8e47314c-6b3a-42dd-a126-3a58f6d1ea9c3.gif)
![本模塊講述建立在Java編程語(yǔ)言中的錯(cuò)誤處理裝置_第4頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/4/8e47314c-6b3a-42dd-a126-3a58f6d1ea9c/8e47314c-6b3a-42dd-a126-3a58f6d1ea9c4.gif)
![本模塊講述建立在Java編程語(yǔ)言中的錯(cuò)誤處理裝置_第5頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/4/8e47314c-6b3a-42dd-a126-3a58f6d1ea9c/8e47314c-6b3a-42dd-a126-3a58f6d1ea9c5.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
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ǔ)句- 描述異常分類- 開(kāi)發(fā)程序來(lái)處理自己的異常 第三節(jié) 異 常異 常 異常類定義程序所遇到的輕微錯(cuò)誤 發(fā)生下列情況時(shí),會(huì)出現(xiàn)異常: 想打開(kāi)的文件不存在 網(wǎng)絡(luò)連接中斷 受控操作數(shù)超出預(yù)定范圍 非常感興趣地正在裝載的類文件丟失 錯(cuò)誤類定義嚴(yán)重的錯(cuò)誤條件 介紹 什么是異常?在Java編程語(yǔ)言中,異常類定義程序中可能遇到的輕微的錯(cuò)誤條件。可以寫(xiě)代碼
2、來(lái)處理異常并繼續(xù)程序執(zhí)行,而不是讓程序中斷。 在程序執(zhí)行中,任何中斷正常程序流程的異常條件就是錯(cuò)誤或異常。例如,發(fā)生下列情況時(shí),會(huì)出現(xiàn)異常:- 想打開(kāi)的文件不存在- 網(wǎng)絡(luò)連接中斷- 受控操作數(shù)超出預(yù)定范圍- 非常感興趣地正在裝載的類文件丟失 在Java編程語(yǔ)言中,錯(cuò)誤類定義被認(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ě)處理程序的選擇,來(lái)處理異常。 通
3、過(guò)瀏覽API,可以決定方法拋出的是什么樣的異常。7.3.2 實(shí)例 考慮一下HelloWorld.java程序版本的簡(jiǎn)單擴(kuò)展,它通過(guò)信息來(lái)循環(huán):1. public class HelloWorld 2. public static void main (String args) 3. int i = 0; 4.5. String greetings = 6. "Hello world!",7. "No, I mean it!",8. "HELLO WORLD!"9. ;10.11. while (i < 4) 12.13. i+;
4、14. 15. 16. 正常情況下,當(dāng)異常被拋出時(shí),在其循環(huán)被執(zhí)行四次之后,程序終止,并帶有錯(cuò)誤信息,就象前面所示的程序那樣。1. c:student> java HelloWorld2. Hello world!3. No, I mean it!4. HELLO WORLD!5.6. at HelloWorld.main(HelloWorld.java:12) 異常處理允許程序捕獲異常,處理它們,然后繼續(xù)程序執(zhí)行。它是分層把關(guān),因此,錯(cuò)誤情況不會(huì)介入到程序的正常流程中。特殊情況發(fā)生時(shí),在與正常執(zhí)行的代碼分離的代碼塊中被處理。這就產(chǎn)生了更易識(shí)別和管理的代碼。第四節(jié) 異常處理 Java編程
5、語(yǔ)言提供了一個(gè)來(lái)考慮哪個(gè)異常被拋出以及如何來(lái)恢復(fù)它的機(jī)制。try和catch語(yǔ)句try和catch語(yǔ)句1. try 2. / code that might throw a particular exception3. catch (MyExceptionType e) 4. / code to execute if a MyExceptionType exception is thrown 5. catch (Exception e) 6. / code to execute if a general Exception exception is thrown 7. 要處理特殊的異常,將能夠
6、拋出異常的代碼放入try塊中,然后創(chuàng)建相應(yīng)的catch塊的列表,每個(gè)可以被拋出異常都有一個(gè)。如果生成的異常與catch中提到的相匹配,那么catch條件的塊語(yǔ)句就被執(zhí)行。在try塊之后,可能有許多catch塊,每一個(gè)都處理不同的異常。1. try 2. / code that might throw a particular exception3. catch (MyExceptionType e) 4. / code to execute if a MyExceptionType exception is thrown 5. catch (Exception e) 6. / code to
7、execute if a general Exception exception is thrown 7. 調(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è)方法(比如,first()),然后它調(diào)用另一個(gè)(比如,second())。如果在second()中發(fā)生異常,那
8、么必須做一個(gè)檢查來(lái)看看該異常是否有一個(gè)catch;如果沒(méi)有,那么對(duì)調(diào)用棧(first())中的下一個(gè)方法進(jìn)行檢查,然后檢查下一個(gè)(main())。如果這個(gè)異常在該調(diào)用棧上沒(méi)有被最后一個(gè)方法處理,那么就會(huì)發(fā)生一個(gè)運(yùn)行時(shí)錯(cuò)誤,程序終止執(zhí)行。finally語(yǔ)句finally語(yǔ)句1. try 2. startFaucet();3. waterLawn();4. 5. finally 6. stopFaucet();7. finally語(yǔ)句定義一個(gè)總是執(zhí)行的代碼塊,而不考慮異常是否被捕獲。下述樣板代碼來(lái)自Frank Yellin弗蘭克葉林的白皮書(shū)Java中的低級(jí)安全:1. try 2. startFau
9、cet();3. waterLawn();4. 5. finally 6. stopFaucet();7. 在前面的例子中,即使異常在打開(kāi)開(kāi)關(guān)或給草地澆水時(shí)發(fā)生,開(kāi)關(guān)也能被關(guān)掉。try 后面的括號(hào)中的代碼被稱做保護(hù)碼。 如果終止程序的System.exit()方法在保護(hù)碼內(nèi)被執(zhí)行,那么,這是finally語(yǔ)句不被執(zhí)行的唯一情況。這就暗示,控制流程能偏離正常執(zhí)行順序,比如,如果一個(gè)return語(yǔ)句被嵌入try塊內(nèi)的代碼中,那么,finally塊中的代碼應(yīng)在return前執(zhí)行。 重訪前例 下面的例子是第169頁(yè)main()方法的重寫(xiě)。本程序以前的版本中產(chǎn)生的異常被捕獲,數(shù)組索引重新設(shè)定,使下述程序
10、繼續(xù)運(yùn)行。1. public static void main (String args) 2. int i = 0;3. String greetings = 4. "Hello world!",5. "No, I mean it!",6. "HELLO WORLD!"7. ;8. while (i < 4) 9. try 10.11. catch (ArrayIndexOutOfBoundsException e)12.13. i = -1;14. finally 15.16. 17. i+;18. / end while(
11、)19. / end main() 當(dāng)循環(huán)被執(zhí)行時(shí),下述在屏幕上出現(xiàn)的信息將改變。1. Hello world!2. This is always printed3. No, I mean it!4. This is always printed5. HELLO WORLD! 6. This is always printed7. Re-setting Index Value 8. This is always printed 第五節(jié) 異常分類 在Java編程語(yǔ)言中,異常有三種分類。類充當(dāng)所有對(duì)象的父類,可以使用異常處理機(jī)制將這些對(duì)象拋出并捕獲。在Throwable類中定義方法來(lái)檢索與異常相關(guān)
12、的錯(cuò)誤信息,并打印顯示異常發(fā)生的棧跟蹤信息。它有Error和Exception兩個(gè)基本子類,如下圖所示: Throwable類不能使用,而使用子類異常中的一個(gè)來(lái)描述任何特殊異常。每個(gè)異常的目的描述如下:- Error表示恢復(fù)不是不可能但很困難的情況下的一種嚴(yán)重問(wèn)題。比如說(shuō)內(nèi)存溢出。不可能指望程序能處理這樣的情況。- RuntimeException表示一種設(shè)計(jì)或?qū)崿F(xiàn)問(wèn)題。也就是說(shuō),它表示如果程序運(yùn)行正常,從不會(huì)發(fā)生的情況。比如,如果數(shù)組索引擴(kuò)展不超出數(shù)組界限,那么,ArrayIndexOutOfBoundsException異常從不會(huì)拋出。比如,這也適用于取消引用一個(gè)空值對(duì)象變量。因?yàn)橐粋€(gè)正確
13、設(shè)計(jì)和實(shí)現(xiàn)的程序從不出現(xiàn)這種異常,通常對(duì)它不做處理。這會(huì)導(dǎo)致一個(gè)運(yùn)行時(shí)信息,應(yīng)確保能采取措施更正問(wèn)題,而不是將它藏到誰(shuí)也不注意的地方。- 其它異常表示一種運(yùn)行時(shí)的困難,它通常由環(huán)境效果引起,可以進(jìn)行處理。例子包括文件未找到或無(wú)效URL異常(用戶打了一個(gè)錯(cuò)誤的URL),如果用戶誤打了什么東西,兩者都容易出現(xiàn)。這兩者都可能因?yàn)橛脩翦e(cuò)誤而出現(xiàn),這就鼓勵(lì)程序員去處理它們。第六節(jié) 共同異常共同異常- ArithmeticException- NullPointerException- NegativeArraySizeException- ArrayIndexoutofBoundsException-
14、SecurityException Java編程語(yǔ)言提供幾種預(yù)定義的異常。下面是可能遇到的更具共同性的異常中的幾種:- ArithmeticException整數(shù)被0除,運(yùn)算得出的結(jié)果。- int I =12 / 0;- NullPointerException當(dāng)對(duì)象沒(méi)被實(shí)例化時(shí),訪問(wèn)對(duì)象的屬性或方法的嘗試:- Date d= null;- NegativeArraySizeException創(chuàng)建帶負(fù)維數(shù)大小的數(shù)組的嘗試。- ArrayIndexoutofBoundsException訪問(wèn)超過(guò)數(shù)組大小范圍的一個(gè)元素的嘗試。- SecurityException典型地被拋出到瀏覽器中,Secur
15、ityManager類將拋出applets的一個(gè)異常,該異常企圖做下述工作(除非明顯地得到允許):- 訪問(wèn)一個(gè)本地文件- 打開(kāi)主機(jī)的一個(gè)socket,這個(gè)主機(jī)與服務(wù)于applet的主機(jī)不是同一個(gè)。- 在運(yùn)行時(shí)環(huán)境中執(zhí)行另一個(gè)程序第七節(jié) 處理或聲明規(guī)則處理或聲明規(guī)則- 用try-catch-finally塊來(lái)處理異常- 使用throws子句聲明代碼能引起一個(gè)異常 為了寫(xiě)出健壯的代碼,Java編程語(yǔ)言要求,當(dāng)一個(gè)方法在棧(即,它已經(jīng)被調(diào)用)上發(fā)生Exception(它與Error或RuntimeException不同)時(shí),那么,該方法必須決定如果出現(xiàn)問(wèn)題該采取什么措施。 程序員可以做滿足該要求的兩
16、件事: 第一,通過(guò)將Trycatch()塊納入其代碼中,在這里捕獲給被命名為屬于某個(gè)超類的異常,并調(diào)用方法處理它。即使catch塊是空的,這也算是處理情況。 第二,讓被調(diào)用的方法表示它將不處理異常,而且該異常將被拋回到它所遇到的調(diào)用方法中。它是按如下所示通過(guò)用throws子句標(biāo)記的該調(diào)用方法的聲明來(lái)實(shí)現(xiàn)的: public void troublesome() throws IOException 關(guān)鍵字throws之后是所有異常的列表,方法可以拋回到它的調(diào)用程序中。盡管這里只顯示了一個(gè)異常,如果有成倍的可能的異??梢酝ㄟ^(guò)該方法被拋出,那么,可以使用逗號(hào)分開(kāi)的列表。 是選擇處理還是選擇聲明一個(gè)異
17、常取決于是否給你自己或你的調(diào)用程序一個(gè)更合適的候選的辦法來(lái)處理異常。注由于異常類象其它類一樣被組編到層次中,而且由于無(wú)論何時(shí)想要使用超類都必須使用子類, 因此,可以捕獲異?!敖M”并以相同的捕獲代碼來(lái)處理它們。例如,盡管IOExceptions(EOFException,FileNotFoundException等等)有幾種不同的類型,通過(guò)俘獲IOException,也可以捕獲IOException任何子類的實(shí)例。第八節(jié) 創(chuàng)建自己的異常 介紹 用戶定義異常是通過(guò)擴(kuò)展Exception類來(lái)創(chuàng)建的。這種異常類可以包含一個(gè)“普通”類所包含的任何東西。下面就是一個(gè)用戶定義異常類例子,它包含一個(gè)構(gòu)造函數(shù)、
18、幾個(gè)變量以及方法:1. public class ServerTimedOutException extends Exception 2. private String reason;3. private int port;4. public ServerTimedOutException (String reason,int port) 5. this.reason = reason;6. this.port = port;7. 8. public String getReason() 9. return reason;10. 11. public int getPort() 12. ret
19、urn port;13. 14. 使用語(yǔ)句來(lái)拋出已經(jīng)創(chuàng)建的異常:throw new ServerTimedOutException("Could not connect", 80); 實(shí)例 考慮一個(gè)客戶服務(wù)器程序。在客戶代碼中,要與服務(wù)器連接,并希望服務(wù)器在5秒鐘內(nèi)響應(yīng)。如果服務(wù)器沒(méi)有響應(yīng),那么,代碼就如下所述拋出一個(gè)異常(如一個(gè)用戶定義的ServerTimedOutException)。1. public void connectMe(String serverName) throws ServerTimedOutException 2. int success;3. int portToConnect = 80;4. success = open(serverName, portToConnect);5. if (success = -1) 6. throw new ServerTimedOutException(7. "Could not connect", 80);8. 9. 要捕獲異常,使用try語(yǔ)句:1. public void findServer() 2. . . .3. try 4. connectMe(defaultServer);5. catch(ServerTimedOutExcep
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2025學(xué)年高中政治課時(shí)作業(yè)6文化在交流中傳播含解析新人教版必修3
- 2024-2025學(xué)年新教材高中地理課時(shí)素養(yǎng)評(píng)價(jià)十五海洋權(quán)益與海洋戰(zhàn)略發(fā)展含解析魯教版必修第二冊(cè)
- 2024-2025學(xué)年八年級(jí)物理上冊(cè)第3章物質(zhì)的簡(jiǎn)單運(yùn)動(dòng)單元雙基雙測(cè)A卷基礎(chǔ)篇含解析北師大版
- 2024-2025學(xué)年高中政治專題3.2樹(shù)立正確的消費(fèi)觀練提升版含解析必修1
- 怎樣寫(xiě)申請(qǐng)書(shū)范文
- 企業(yè)登記 備案 申請(qǐng)書(shū)
- 見(jiàn)義勇為申請(qǐng)書(shū)
- 2025年度醫(yī)療信息化系統(tǒng)建設(shè)與維護(hù)合同模板
- 2025年度醫(yī)療科研設(shè)備代理銷售合作協(xié)議
- 回學(xué)校讀書(shū)的申請(qǐng)書(shū)
- 雅思學(xué)習(xí)證明范本范例案例模板
- 商業(yè)銀行不良資產(chǎn)處置方式匯總課件
- 注塑生產(chǎn)過(guò)程控制流程
- 三相分離器操作手冊(cè)
- 一年級(jí)下冊(cè)口算題(可直接打印)
- 兒童文學(xué)應(yīng)用教程(第二版)完整全套教學(xué)課件 第1-12章 兒童文學(xué)與課程-兒童文學(xué)與小學(xué)語(yǔ)文習(xí)作教學(xué)
- 青島生建z28-75滾絲機(jī)說(shuō)明書(shū)
- 公務(wù)員面試應(yīng)急應(yīng)變題目大全及解析
- 學(xué)校年級(jí)組長(zhǎng)工作計(jì)劃
- 2023年廣州市青年教師初中數(shù)學(xué)解題比賽決賽試卷
- 對(duì)折剪紙課件
評(píng)論
0/150
提交評(píng)論