第7章 異常處理_第1頁
第7章 異常處理_第2頁
第7章 異常處理_第3頁
第7章 異常處理_第4頁
第7章 異常處理_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第七章異常處理

7.1異常的概念

7.2異常處理1教學目的和要求:理解什么是異常,了解異常發(fā)生的原因

掌握Java異常處理的機制

創(chuàng)建自己的異常類2重點:Java異常處理機制;Java內(nèi)置異常類;如何自定義異常難點: 理解異常處理塊中各個語句塊的作用教學重點與難點

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)也稱為例外,是一種程序運行時的錯誤。例如:試圖打開的文件找不到內(nèi)存空間不足除數(shù)為零用戶輸入數(shù)據(jù)錯誤在傳統(tǒng)的編程中,由于沒有異常處理機制,一旦出現(xiàn)異常,程序?qū)⒅兄埂6覀兿M绦虿灰驗橐粋€小錯誤就停止運行。當錯誤發(fā)生時,程序能夠自動處理,或者能夠向用戶提供一些與錯誤相關(guān)的信息。5

7.1.1Java異常處理機制

Java語言是一種容錯性很強的語言,其中引入了異常處理機制。

Java的異常處理也是面向?qū)ο蟮?,當一個異常發(fā)生時程序會生成一個異常對象,稱之為拋出(throw)一個異常。異常處理的核心思想是:捕獲(Catch)

經(jīng)預(yù)先判斷可能出錯的代碼段中可能產(chǎn)生的異常。6

Java異常處理由5個關(guān)鍵字實現(xiàn):try、catch、throw、throws和finally。其中try用來執(zhí)行一段程序,如果出現(xiàn)異常,則系統(tǒng)拋出(throw)一個異常對象,可以根據(jù)該對象的類型來捕獲(catch)它并處理它。最后由finally語句塊來進行收尾工作。下面是異常處理塊的基本形式:

try{//可能產(chǎn)生異常的代碼塊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異常處理機制是面向?qū)ο蟮?。每發(fā)生一起異常就產(chǎn)生一個異常對象。在Java類庫中定義了很多異常類。注意:所有異常類都是類

java.lang.Throwable

的子類。

ThrowableErrorExceptionVirtualMachineErrorAWTErrorRuntimeExceptionIOExceptionEOFExceptionFileNotFoundExceptionArithmeticExceptionNullPointerExceptionIndexOutOfBoundsException

7.1.2內(nèi)置異常類LinkageErrorOutOfMemoryErrorStackOverflowErrorClassNotFoundExceptionAWTException9Throwable

類有兩個直接子類:子類

Error代表一些很難恢復(fù)的嚴重的系統(tǒng)錯誤,不是用戶程序本身所能控制的。所以一般不用捕獲與處理Error,而是交給Java運行系統(tǒng)處理。子類Exception代表用戶程序可以捕獲的異常情況。子類RuntimeException代表程序設(shè)計或?qū)崿F(xiàn)上的問題,如除數(shù)為零或者數(shù)組越界等。這類異常經(jīng)常出現(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í)行,而是轉(zhuǎn)到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是算術(shù)異常類的一個對象。當try語句塊中有異常發(fā)生時,Java系統(tǒng)會自動拋出一個異常對象;然后系統(tǒng)把這個異常對象的類型與catch塊中的異常類型進行比較,如果匹配,則把拋出的異常對象傳遞給參數(shù)e。最后再執(zhí)行catch語句塊中的語句進行異常的處理。14多條catch語句如果try語句塊中可能發(fā)生多種異常,則可以使用多個catch語句分別捕獲;如果這些異常具有繼承關(guān)系,則必須先捕獲子類型的異常,再捕獲父類型的異常。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語句在異常處理機制中起到收尾工作,用來保證程序的正確性。例如打開一個文件失敗,程序處理完異常之后就會退出,但是這時如果文件還沒有關(guān)閉,這樣可能會造成文件內(nèi)容的遺失,所以必須先關(guān)閉該文件,才能退出異常的處理。而關(guān)閉文件的操作就放在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()中可能產(chǎn)生一個異常,但是method()本身又不愿意或者沒有能力處理該異常。則method()方法可以聲明拋棄該異常,將該異常交給調(diào)用它的其他方法去處理。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í)行,轉(zhuǎn)到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)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論