




已閱讀5頁,還剩34頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
java的異常處理,伍淳華 北京郵電大學計算機學院,java,java的異常處理,什么是異常,異常就是在程序的執(zhí)行過程中所發(fā)生的異常事件,它中斷指令的正常執(zhí)行,java,java的異常處理,異常處理,可能出現(xiàn)的問題 用戶輸入錯誤 設備錯誤 物理限制 代碼錯誤,java,java的異常處理,異常(throwable)分類,throwable:所有異常的根類 error:throwable的直接子類 動態(tài)鏈接失敗,虛擬機錯誤等。通常java程序不應該捕獲這類異常,也不會拋棄這種異常。,java,java的異常處理,異常(throwable)分類,exception 運行時異常 繼承于runtimeexception.java 一般是由于程序錯誤產(chǎn)生 -錯誤的類型轉換 -數(shù)組訪問越界 -訪問空指針 編譯器允許不對它們做出處理(unchecked) “如果出現(xiàn)runtimeexception異常,就一定是你的問題”,java,java的異常處理,異常(throwable)分類,exception 非運行時異常 除了運行時異常之外的其它的繼承自exception的異常類。 程序曾經(jīng)能夠正常運行,但由于某種情況的變化,導致異常出現(xià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的異常處理,異常處理機制,在java的執(zhí)行過程中,如果出現(xiàn)了異常事件,就會生成一個異常對象。java有兩種對異常的處理方式: 拋棄異常:方法內(nèi)部產(chǎn)生異常的地方,生成一個異常對象,并將該異常對象提交給方法的調用者,這一異常的生成和提交過稱成為拋棄(throw)異常 捕獲異常:當java運行時得到一個異常對象時,它將會尋找處理這一異常的代碼。找到能夠處理這種類型的異常的方法后,系統(tǒng)把當前異常對象交給這個方法處理,這一過程成為捕獲(catch)異常,java,java的異常處理,拋棄異常,聲明拋棄異常 如果在一個方法中生成了一個異常,但是這一方法并不確切的知道如何對這一異常事件進行處理,這時,一個方法就應該聲明拋棄異常。 “一個方法不僅需要告訴編譯器將要返回什么值,還要告訴編譯器可能發(fā)生什么異常”,java,java的異常處理,拋棄異常,聲明拋棄異常 聲明拋棄異常是在一個方法聲明中的throw子句中指明的。例如 public fileinputstream(string name )throws ioexception throws子句中可以同時指明多個異常,說明該方法將不對這些異常進行處理,而是聲明拋棄它們。 public static void main(string args)throws ioexception,indexoutofboundsexception,java,java的異常處理,拋棄異常,如何拋棄異常 拋棄異常首先要生成異常對象 ,異常對象可由某些類的實例生成,也可以由java虛擬機生成。拋棄異常對象時通過throw語句實現(xiàn)。 ioexception e=new ioexception( ); throw e; 可以拋棄的異常必須是throwable或者其子類的實例。 下面的語句在編譯時將會產(chǎn)生語法錯誤 throw new string(“want to throw”);,java,java的異常處理,拋棄異常,對于已存在的異常類,拋出該異常非常容易 找到一個合適的異常類; 創(chuàng)建這個類的一個對象; 將該對象拋出;,java,java的異常處理,拋棄異常,對于已存在的異常類,拋出該異常非常容易 string readdata(scanner in)throws eofexception while() if(!in.hasnext( ) if(nlen) throw new eofexception( ); ,java,java的異常處理,自定義異常類,自定義異常類即是定義一個派生于exception的直接或間接子類;如一個派生于ioexception的類。 一般情況下,定義的異常類應該包括兩個構造器,一個是默認的構造器,一個是帶有詳細描述信息的構造器(超類throwable的tostring方法會打印出這些詳細信息,有利調試代碼),java,java的異常處理,自定義類,class fileformatexception extends ioexception public fileformatexception() public fileformatexception(string gripe) super(gripe); ,java,java的異常處理,自定義類,string readdata(bufferedreader in)throws fileformatexception while() if(ch=read()=-1) if(nlen) throw new fileformatexception(“file format error!”); ,java,java的異常處理,捕獲異常 捕獲異常是通過try-catch-finally語句實現(xiàn)的 try catch(exceptionname1 e) catch(exceptionname2 e) finally ,java,java的異常處理,try 捕獲異常的第一步使用try選定捕獲異常的范圍,由try所限定的代碼塊中的語句在執(zhí)行過程中可能會生成異常對象,java,java的異常處理,catch -每個try代碼塊可以伴隨一個或多個catch語句,用于處理try代碼塊中所生成的異常事件。 -catch語句只需要一個形式參數(shù)指明它所能捕獲的異常類型,這個類必須是throwable的子類,運行時系統(tǒng)通過參數(shù)值把被拋棄的異常對象傳寄給catch塊 -在catch塊中是對異常對象進行處理的代碼,與訪問其他對象一樣,可以訪問一個異常對象的變量或調用它的方法。getmessage()是類throwable所提供的方法,用來得到有關異常事件的信息,類throwable還提供了方法printstacktrace()用來跟蹤異常事件發(fā)生時執(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語句的順序,捕獲異常的順序和不同catch語句的順序有關,當捕獲到一個異常時。剩下的catch語句就不再進行匹配。 因此在安排catch語句的順序時,首先應該捕獲最特殊的異常,然后在逐漸一般化,也就是一般先安排子類,再安排父類。,java,java的異常處理,finally 捕獲異常的最后一步是通過finally語句為異常處理提供一個統(tǒng)一的出口,使得控制流程轉到程序的其它部分以前,能夠對程序的狀態(tài)做統(tǒng)一的管理。不論在try代碼塊中是否發(fā)生了異常事件,finally塊中的語句都會被執(zhí)行。,java,java的異常處理,try /1 code that might throw exceptions /2 catch(ioexception e) /3 show error dialog finally /4 /5 ,java,java的異常處理,程序沒有產(chǎn)生異常,1-2-4-5 程序產(chǎn)生了一個可被catch捕獲的異常:1-3-4-5 程序產(chǎn)生了一個不能被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的異常處理,使用異常機制的建議,(1)異常不能代替簡單的測試:只在異常情況下使用異常機制 例:上百萬地對一個空棧進行退棧操作 if(!s.empty() s.pop(); try( ) s.pop(); catch(emptystackexception e) ,java,java的異常處理,使用異常機制的建議,_ test throw/catch _ 154 milliseco
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 市政工程市容管理試題及答案
- 工程項目團隊的角色與職責分析試題及答案
- 公共關系實踐案例分析試題及答案
- 水利水電工程建設評價試題及答案
- 水利水電工程目標管理試題及答案
- 行政管理公共關系學品牌建設試題及答案
- 公共關系學中的社會責任分析試題及答案
- 2025餐飲用品采購合同
- 經(jīng)濟運行與政策試題及答案配合
- 2025年市政工程題庫及試題答案
- 實驗 驗證牛頓第二定律
- 鉆孔水文地質工程地質綜合編錄一覽表模板
- 備用柴油發(fā)電機定期啟動試驗記錄表
- 國企食堂運作方案
- 二年級上冊心理健康教育說課稿-面對批評 全國通用
- 工程管理檢討書
- 勞務派遣合同示范文本(4篇)
- 2023年廣西賀州中考語文真題及答案
- 押運員崗位職責
- 2008年安徽省中考英語試卷及答案
- 眼動的檢查與訓練
評論
0/150
提交評論