版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第七章異常處理
7.1異常的概念
7.2異常處理1教學目的和要求:理解什么是異常,了解異常發(fā)生的原因
掌握Java異常處理的機制
創(chuàng)建自己的異常類2重點:Java異常處理機制;Java內置異常類;如何自定義異常難點: 理解異常處理塊中各個語句塊的作用教學重點與難點
31 PublicclassHelloWorld{2 publicstaticvoidmain(Stringargs[]){3 inti=0;4 Stringg[]={"HelloWorld!","Hello!",5 "HELLOWORLD!"};6 while(i<4){7 System.out.println(g[i]);8 i++;9 }10 }11 }HelloWorld!Hello!HELLOWORLD!Java.lang.ArrayIndexOutOfBoundsException atHelloWorld.main(HelloWorld.java:7)4
7.1異常的概念異常(Exception)也稱為例外,是一種程序運行時的錯誤。例如:試圖打開的文件找不到內存空間不足除數(shù)為零用戶輸入數(shù)據(jù)錯誤在傳統(tǒng)的編程中,由于沒有異常處理機制,一旦出現(xiàn)異常,程序將中止。而我們希望程序不要因為一個小錯誤就停止運行。當錯誤發(fā)生時,程序能夠自動處理,或者能夠向用戶提供一些與錯誤相關的信息。5
7.1.1Java異常處理機制
Java語言是一種容錯性很強的語言,其中引入了異常處理機制。
Java的異常處理也是面向對象的,當一個異常發(fā)生時程序會生成一個異常對象,稱之為拋出(throw)一個異常。異常處理的核心思想是:捕獲(Catch)
經預先判斷可能出錯的代碼段中可能產生的異常。6
Java異常處理由5個關鍵字實現(xiàn):try、catch、throw、throws和finally。其中try用來執(zhí)行一段程序,如果出現(xiàn)異常,則系統(tǒng)拋出(throw)一個異常對象,可以根據(jù)該對象的類型來捕獲(catch)它并處理它。最后由finally語句塊來進行收尾工作。下面是異常處理塊的基本形式:
try{//可能產生異常的代碼塊thrownewExceptionType1();//拋出ExceptionType1類型的異常
}catch(ExceptionType1e){//捕獲并處理ExceptionType1類型的異常。該代碼段不一定會執(zhí)行
}catch(ExceptionType2e){//捕獲并處理ExceptionType2類型的異常。該代碼段不一定會執(zhí)行
}finally{//收尾工作,釋放資源。該代碼段一定會執(zhí)行
}7
importjava.io.*; publicclassE7_1{ publicstaticvoidmain(Stringargs[]){
intb; try{
FileInputStream
fis=new
FileInputStream("test.txt"); while((b=fis.read())!=-1)
System.out.print((char)b);
fis.close(); } catch(Exceptione){
system.out.println("出錯了,原因是:");
system.out.println(e.toString()); }} }8
Java異常處理機制是面向對象的。每發(fā)生一起異常就產生一個異常對象。在Java類庫中定義了很多異常類。注意:所有異常類都是類
java.lang.Throwable
的子類。
ThrowableErrorExceptionVirtualMachineErrorAWTErrorRuntimeExceptionIOExceptionEOFExceptionFileNotFoundExceptionArithmeticExceptionNullPointerExceptionIndexOutOfBoundsException
7.1.2內置異常類LinkageErrorOutOfMemoryErrorStackOverflowErrorClassNotFoundExceptionAWTException9Throwable
類有兩個直接子類:子類
Error代表一些很難恢復的嚴重的系統(tǒng)錯誤,不是用戶程序本身所能控制的。所以一般不用捕獲與處理Error,而是交給Java運行系統(tǒng)處理。子類Exception代表用戶程序可以捕獲的異常情況。子類RuntimeException代表程序設計或實現(xiàn)上的問題,如除數(shù)為零或者數(shù)組越界等。這類異常經常出現(xiàn),如果全部做出處理,會影響程序的可讀性和效率。所以這類異常,程序可以處理,也可以交給Java運行系統(tǒng)自動處理。其他子類(例如IOException,ClassNotFoundException
等)程序中必須捕獲并處理這些異常,或者聲明拋棄這些異常。ErrorExceptionRuntimeExceptionThrowableIOExceptionClassNotFoundException……107.2異常處理7.2.1捕獲異常7.2.2聲明拋棄異常7.2.3顯示拋出異常7.2.4自定義異常117.2.1捕獲異常捕獲異常是通過try-catch-finally語句實現(xiàn)的。其中try語句不能單獨使用,必須和catch或者finally語句配合使用。為了防止并處理一個運行時的錯誤,需要把可能出錯的代碼放進try語句塊中。當try語句塊中的某條語句發(fā)生異常,該塊中余下的語句將不再執(zhí)行,而是轉到catch語句中去執(zhí)行。12
importjava.io.*; publicclassE7_3{ publicstaticvoidmain(String
args[]){ try{
inti=7/0;
System.out.println("該語句會不會執(zhí)行?"); } catch(ArithmeticExceptione){
System.out.println("出現(xiàn)錯誤:" +e.getMessage()); }} }try語句塊catch語句塊13catch語句catch(ArithmeticException
e)catch之后的括號中是一個參數(shù)e,e是算術異常類的一個對象。當try語句塊中有異常發(fā)生時,Java系統(tǒng)會自動拋出一個異常對象;然后系統(tǒng)把這個異常對象的類型與catch塊中的異常類型進行比較,如果匹配,則把拋出的異常對象傳遞給參數(shù)e。最后再執(zhí)行catch語句塊中的語句進行異常的處理。14多條catch語句如果try語句塊中可能發(fā)生多種異常,則可以使用多個catch語句分別捕獲;如果這些異常具有繼承關系,則必須先捕獲子類型的異常,再捕獲父類型的異常。15
publicclassE7_5{ publicstaticvoidmain(String
args[]){ try{
inti=7/0;
System.out.println("該語句會不會執(zhí)行?"); } catch(Exceptione){
System.out.println(e); } catch(ArithmeticExceptione){
System.out.println(e); }} }16finally語句塊
finally語句在異常處理機制中起到收尾工作,用來保證程序的正確性。例如打開一個文件失敗,程序處理完異常之后就會退出,但是這時如果文件還沒有關閉,這樣可能會造成文件內容的遺失,所以必須先關閉該文件,才能退出異常的處理。而關閉文件的操作就放在finally語句塊中。17importjava.io.*;publicclassE7_6{ publicstaticvoidmain(String
args[]){ try{
inti=7/0;
FileInputStreamf=newFileInputStream("test.txt"); } catch(ArithmeticExceptione){
System.out.println(e); } catch(FileNotFoundExceptione){
System.out.println(e); } finally{
System.out.println("finally"); }} }187.2.2聲明拋棄異常如果一個方法method()中可能產生一個異常,但是method()本身又不愿意或者沒有能力處理該異常。則method()方法可以聲明拋棄該異常,將該異常交給調用它的其他方法去處理。19importjava.io.*;publicclassE7_7{ voidmethod()throwsFileNotFoundException{
FileInputStreamf=newFileInputStream("test.txt"); } publicstaticvoidmain(String
args[]){ try{ E7_7i=newE7_7();
i.method(); } catch(FileNotFoundExceptione){
System.out.println(e); } }}20importjava.io.*;publicclassE7_8{ voidmethod()throwsFileNotFoundException{
FileInputStreamf=newFileInputStream("test.txt"); } publicstaticvoidmain(String
args[])throws
FileNotFoundException
{ E7_8i=newE7_8();
i.method(); }}Java運行系統(tǒng)如果要一次拋棄多個異常,則用逗號分隔開,如下所示:voidmethod()throwsIOException,FileNotFoundException{}217.2.3顯示拋出異常通常,異常對象是由Java系統(tǒng)自動拋出(throw)的。程序員也可以在程序中根據(jù)條件顯示拋出(throw)一個異常。throw語句之后的語句將不再執(zhí)行,轉到catch語句塊中去執(zhí)行。22importjava.io.*;publicclassE7_9{ voidmethod()throwsFileNotFoundException{ Strings=newString(); if(s.equals(""))
thrownewFileNotFoundException(); } publicstaticvoidmain(String
args[])throwsFileNotFoundException
{ E7_9i=newE7_9();
i.method(); }}thrownew異常類();237.2.4自定義異常前面,我們討論的都是由Java
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年全球及中國金融風控服務行業(yè)頭部企業(yè)市場占有率及排名調研報告
- 2025年全球及中國擋圈行業(yè)頭部企業(yè)市場占有率及排名調研報告
- 2025年全球及中國自動細胞分析儀行業(yè)頭部企業(yè)市場占有率及排名調研報告
- 二零二四年物流企業(yè)駕駛員安全駕駛責任合同2篇
- 二零二五年度大米加工企業(yè)能源消耗監(jiān)測與節(jié)能合同4篇
- 書店裝修延期補充協(xié)議
- 書店裝修合同及條款
- 雜志社改造拆除協(xié)議樣本
- 2025財務部上半年財務分析報告總結范文
- 2021-2026年中國芪膠升白膠囊行業(yè)發(fā)展趨勢預測及投資戰(zhàn)略規(guī)劃分析報告
- 無線廣播行業(yè)現(xiàn)狀分析
- 漢語言溝通發(fā)展量表(長表)-詞匯及手勢(8-16月齡)
- 高速公路相關知識講座
- 兒科關于抗生素使用的PDCA
- 商務服務業(yè)的市場細分和定位策略
- 財政學論文我國財政支出存在的問題及改革建議
- 2022年湖南高速鐵路職業(yè)技術學院單招數(shù)學模擬試題及答案解析
- 小學生必備古詩
- 手術室護理實踐指南2023年
- 移動商務內容運營(吳洪貴)任務六 結合熱度事件的內容傳播
- 新人教版六年級下冊數(shù)學全冊課件
評論
0/150
提交評論