




已閱讀5頁(yè),還剩34頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
java的異常處理,伍淳華 北京郵電大學(xué)計(jì)算機(jī)學(xué)院,java,java的異常處理,什么是異常,異常就是在程序的執(zhí)行過(guò)程中所發(fā)生的異常事件,它中斷指令的正常執(zhí)行,java,java的異常處理,異常處理,可能出現(xiàn)的問(wèn)題 用戶(hù)輸入錯(cuò)誤 設(shè)備錯(cuò)誤 物理限制 代碼錯(cuò)誤,java,java的異常處理,異常(throwable)分類(lèi),throwable:所有異常的根類(lèi) error:throwable的直接子類(lèi) 動(dòng)態(tài)鏈接失敗,虛擬機(jī)錯(cuò)誤等。通常java程序不應(yīng)該捕獲這類(lèi)異常,也不會(huì)拋棄這種異常。,java,java的異常處理,異常(throwable)分類(lèi),exception 運(yùn)行時(shí)異常 繼承于runtimeexception.java 一般是由于程序錯(cuò)誤產(chǎn)生 -錯(cuò)誤的類(lèi)型轉(zhuǎn)換 -數(shù)組訪問(wèn)越界 -訪問(wèn)空指針 編譯器允許不對(duì)它們做出處理(unchecked) “如果出現(xiàn)runtimeexception異常,就一定是你的問(wèn)題”,java,java的異常處理,異常(throwable)分類(lèi),exception 非運(yùn)行時(shí)異常 除了運(yùn)行時(shí)異常之外的其它的繼承自exception的異常類(lèi)。 程序曾經(jīng)能夠正常運(yùn)行,但由于某種情況的變化,導(dǎo)致異常出現(xiàn),程序不能正常運(yùn)行。 -文件不存在 -用戶(hù)輸入錯(cuò)誤 編譯器要求程序必須對(duì)這類(lèi)異常進(jìn)行處理(checked),java,java的異常處理,java,java的異常處理,異常示例,import java.io.*; class exceptiondemo1 public static void main(string args) fileinputstream fis=new fileinputstream(“text”); int b; while(b=fis.read()!=-1) system.out.print(b); fis.close(); ,java,java的異常處理,異常示例,c:javac exceptiondemo1.java exceptiondemo1.java:6:exception java.io.filenotfoundexception must be caught,or it must be declared in the throws clause of this method fileinputstream fis=new fileinputstream(“text”); exceptiondemo1.java:8:exception java.io.ioexception must be caught,or it must be declared in the throws clause of this method while(b=fis.read()!=-1),java,java的異常處理,異常處理,class exceptiondemo2 public static void main(string args) int a=0; system.out.println(5/a); ,java,java的異常處理,異常處理,c:/javac exceptiondemo2.java c:/java exceptiondemo2 java.lang.arithemeticexception:/by zero at exceptiondemo2.main(exceptiondemo2.java:4),java,java的異常處理,異常處理機(jī)制,在java的執(zhí)行過(guò)程中,如果出現(xiàn)了異常事件,就會(huì)生成一個(gè)異常對(duì)象。java有兩種對(duì)異常的處理方式: 拋棄異常:方法內(nèi)部產(chǎn)生異常的地方,生成一個(gè)異常對(duì)象,并將該異常對(duì)象提交給方法的調(diào)用者,這一異常的生成和提交過(guò)稱(chēng)成為拋棄(throw)異常 捕獲異常:當(dāng)java運(yùn)行時(shí)得到一個(gè)異常對(duì)象時(shí),它將會(huì)尋找處理這一異常的代碼。找到能夠處理這種類(lèi)型的異常的方法后,系統(tǒng)把當(dāng)前異常對(duì)象交給這個(gè)方法處理,這一過(guò)程成為捕獲(catch)異常,java,java的異常處理,拋棄異常,聲明拋棄異常 如果在一個(gè)方法中生成了一個(gè)異常,但是這一方法并不確切的知道如何對(duì)這一異常事件進(jìn)行處理,這時(shí),一個(gè)方法就應(yīng)該聲明拋棄異常。 “一個(gè)方法不僅需要告訴編譯器將要返回什么值,還要告訴編譯器可能發(fā)生什么異常”,java,java的異常處理,拋棄異常,聲明拋棄異常 聲明拋棄異常是在一個(gè)方法聲明中的throw子句中指明的。例如 public fileinputstream(string name )throws ioexception throws子句中可以同時(shí)指明多個(gè)異常,說(shuō)明該方法將不對(duì)這些異常進(jìn)行處理,而是聲明拋棄它們。 public static void main(string args)throws ioexception,indexoutofboundsexception,java,java的異常處理,拋棄異常,如何拋棄異常 拋棄異常首先要生成異常對(duì)象 ,異常對(duì)象可由某些類(lèi)的實(shí)例生成,也可以由java虛擬機(jī)生成。拋棄異常對(duì)象時(shí)通過(guò)throw語(yǔ)句實(shí)現(xiàn)。 ioexception e=new ioexception( ); throw e; 可以拋棄的異常必須是throwable或者其子類(lèi)的實(shí)例。 下面的語(yǔ)句在編譯時(shí)將會(huì)產(chǎn)生語(yǔ)法錯(cuò)誤 throw new string(“want to throw”);,java,java的異常處理,拋棄異常,對(duì)于已存在的異常類(lèi),拋出該異常非常容易 找到一個(gè)合適的異常類(lèi); 創(chuàng)建這個(gè)類(lèi)的一個(gè)對(duì)象; 將該對(duì)象拋出;,java,java的異常處理,拋棄異常,對(duì)于已存在的異常類(lèi),拋出該異常非常容易 string readdata(scanner in)throws eofexception while() if(!in.hasnext( ) if(nlen) throw new eofexception( ); ,java,java的異常處理,自定義異常類(lèi),自定義異常類(lèi)即是定義一個(gè)派生于exception的直接或間接子類(lèi);如一個(gè)派生于ioexception的類(lèi)。 一般情況下,定義的異常類(lèi)應(yīng)該包括兩個(gè)構(gòu)造器,一個(gè)是默認(rèn)的構(gòu)造器,一個(gè)是帶有詳細(xì)描述信息的構(gòu)造器(超類(lèi)throwable的tostring方法會(huì)打印出這些詳細(xì)信息,有利調(diào)試代碼),java,java的異常處理,自定義類(lèi),class fileformatexception extends ioexception public fileformatexception() public fileformatexception(string gripe) super(gripe); ,java,java的異常處理,自定義類(lèi),string readdata(bufferedreader in)throws fileformatexception while() if(ch=read()=-1) if(nlen) throw new fileformatexception(“file format error!”); ,java,java的異常處理,捕獲異常 捕獲異常是通過(guò)try-catch-finally語(yǔ)句實(shí)現(xiàn)的 try catch(exceptionname1 e) catch(exceptionname2 e) finally ,java,java的異常處理,try 捕獲異常的第一步使用try選定捕獲異常的范圍,由try所限定的代碼塊中的語(yǔ)句在執(zhí)行過(guò)程中可能會(huì)生成異常對(duì)象,java,java的異常處理,catch -每個(gè)try代碼塊可以伴隨一個(gè)或多個(gè)catch語(yǔ)句,用于處理try代碼塊中所生成的異常事件。 -catch語(yǔ)句只需要一個(gè)形式參數(shù)指明它所能捕獲的異常類(lèi)型,這個(gè)類(lèi)必須是throwable的子類(lèi),運(yùn)行時(shí)系統(tǒng)通過(guò)參數(shù)值把被拋棄的異常對(duì)象傳寄給catch塊 -在catch塊中是對(duì)異常對(duì)象進(jìn)行處理的代碼,與訪問(wèn)其他對(duì)象一樣,可以訪問(wèn)一個(gè)異常對(duì)象的變量或調(diào)用它的方法。getmessage()是類(lèi)throwable所提供的方法,用來(lái)得到有關(guān)異常事件的信息,類(lèi)throwable還提供了方法printstacktrace()用來(lái)跟蹤異常事件發(fā)生時(shí)執(zhí)行堆棧的內(nèi)容,java,java的異常處理,try catch(filenotfoundexception e) system.out.println(e); system.out.println(“message:”+e.getmessage(); e.printstacktrace(system.out); catch(ioexception e) system.out.println(e); ,java,java的異常處理,catch語(yǔ)句的順序,捕獲異常的順序和不同catch語(yǔ)句的順序有關(guān),當(dāng)捕獲到一個(gè)異常時(shí)。剩下的catch語(yǔ)句就不再進(jìn)行匹配。 因此在安排catch語(yǔ)句的順序時(shí),首先應(yīng)該捕獲最特殊的異常,然后在逐漸一般化,也就是一般先安排子類(lèi),再安排父類(lèi)。,java,java的異常處理,finally 捕獲異常的最后一步是通過(guò)finally語(yǔ)句為異常處理提供一個(gè)統(tǒng)一的出口,使得控制流程轉(zhuǎn)到程序的其它部分以前,能夠?qū)Τ绦虻臓顟B(tài)做統(tǒng)一的管理。不論在try代碼塊中是否發(fā)生了異常事件,finally塊中的語(yǔ)句都會(huì)被執(zhí)行。,java,java的異常處理,try /1 code that might throw exceptions /2 catch(ioexception e) /3 show error dialog finally /4 /5 ,java,java的異常處理,程序沒(méi)有產(chǎn)生異常,1-2-4-5 程序產(chǎn)生了一個(gè)可被catch捕獲的異常:1-3-4-5 程序產(chǎn)生了一個(gè)不能被catch捕獲的異常:1-4,java,java的異常處理,異常處理,積極處理 消極處理,java,java的異常處理,異常處理,例: fileinputstream(string name)throws filenotfoundexception import java.io.*; class exceptiondemo1 public static void main (string args) fileinputstream fis=new fileinputstream(“text”); ,java,java的異常處理,異常處理,積極處理方式 import java.io.*; class exceptiondemo1 public static void main (string args) try fileinputstream fis=new fileinputstream(“text”); catch(filenotfoundexcption e) ,java,java的異常處理,異常處理,消極處理方式 import java.io.*; class exceptiondemo1 public static void main (string args) throws filenotfoundexcption fileinputstream fis=new fileinputstream(“text”); ,java,java的異常處理,異常處理,處理原則 捕獲那些知道如何處理的異常; 將不知道如何處理的異常拋出;,java,java的異常處理,使用異常機(jī)制的建議,(1)異常不能代替簡(jiǎn)單的測(cè)試:只在異常情況下使用異常機(jī)制 例:上百萬(wàn)地對(duì)一個(gè)空棧進(jìn)行退棧操作 if(!s.empty() s.pop(); try( ) s.pop(); catch(emptystackexception e) ,java,java的異常處理,使用異常機(jī)制的建議,_ test throw/catch _ 154 milliseco
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2025學(xué)年高中物理課時(shí)作業(yè)4電勢(shì)和電勢(shì)差含解析粵教版選修3-1
- I can play the piano. 拓展(教學(xué)設(shè)計(jì))-2023-2024學(xué)年外研版(一起)英語(yǔ)六年級(jí)下冊(cè)
- 粵教版(B版)三年級(jí)上冊(cè)第11課《多彩風(fēng)車(chē)園》教學(xué)設(shè)計(jì)
- Unit 1 Festivals and Celebrations Discovering Useful Structures 全英文教學(xué)設(shè)計(jì)-2023-2024學(xué)年高中英語(yǔ)人教版(2019)必修第三冊(cè)
- 識(shí)字2《樹(shù)之歌》教學(xué)設(shè)計(jì)-2024-2025學(xué)年統(tǒng)編版語(yǔ)文二年級(jí)上冊(cè)
- 第14課 網(wǎng)絡(luò)身份認(rèn)證 教學(xué)設(shè)計(jì) 2023-2024學(xué)年 浙教版(2023)信息科技八年級(jí)上冊(cè)
- 2024年字典行業(yè)市場(chǎng)深度分析及發(fā)展前景預(yù)測(cè)報(bào)告
- Unit 1 This is me!Welcome to the unit 教學(xué)設(shè)計(jì) -2024-2025學(xué)年譯林版(2024)七年級(jí)上冊(cè)英語(yǔ)
- 第21課《北冥有魚(yú)》教學(xué)設(shè)計(jì)-2023-2024學(xué)年統(tǒng)編版語(yǔ)文八年級(jí)下冊(cè)
- 第二課 國(guó)家的結(jié)構(gòu)形式 教學(xué)設(shè)計(jì)-2024-2025學(xué)年高中政治統(tǒng)編版選擇性必修一當(dāng)代國(guó)際政治與經(jīng)濟(jì)
- 模具試模通知單
- 燈泡貫流式機(jī)組基本知識(shí)培訓(xùn)ppt課件
- 人參無(wú)公害標(biāo)準(zhǔn)化生產(chǎn)操作規(guī)程
- 人教版三年級(jí)下冊(cè)體育與健康教案(全冊(cè)教學(xué)設(shè)計(jì))
- DB61∕T 5006-2021 人民防空工程標(biāo)識(shí)標(biāo)準(zhǔn)
- 產(chǎn)品結(jié)構(gòu)設(shè)計(jì)(課堂PPT)
- 第九課_靜止的生命
- 尖尖的東西我不碰(課堂PPT)
- 工程勘察和設(shè)計(jì)承攬業(yè)務(wù)的范圍
- 碳纖維、鋼板加固板計(jì)算表(根據(jù)2013版加固規(guī)范 編寫(xiě))
- 第二版人民幣暗記大全
評(píng)論
0/150
提交評(píng)論