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

下載本文檔

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

文檔簡(jiǎn)介

第七章異常處理

7.1異常的概念

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

掌握J(rèn)ava異常處理的機(jī)制

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

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

7.1.1Java異常處理機(jī)制

Java語(yǔ)言是一種容錯(cuò)性很強(qiáng)的語(yǔ)言,其中引入了異常處理機(jī)制。

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

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

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

try{//可能產(chǎn)生異常的代碼塊thrownewExceptionType1();//拋出ExceptionType1類型的異常

}catch(ExceptionType1e){//捕獲并處理ExceptionType1類型的異常。該代碼段不一定會(huì)執(zhí)行

}catch(ExceptionType2e){//捕獲并處理ExceptionType2類型的異常。該代碼段不一定會(huì)執(zhí)行

}finally{//收尾工作,釋放資源。該代碼段一定會(huì)執(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("出錯(cuò)了,原因是:");

system.out.println(e.toString()); }} }8

Java異常處理機(jī)制是面向?qū)ο蟮?。每發(fā)生一起異常就產(chǎn)生一個(gè)異常對(duì)象。在Java類庫(kù)中定義了很多異常類。注意:所有異常類都是類

java.lang.Throwable

的子類。

ThrowableErrorExceptionVirtualMachineErrorAWTErrorRuntimeExceptionIOExceptionEOFExceptionFileNotFoundExceptionArithmeticExceptionNullPointerExceptionIndexOutOfBoundsException

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

類有兩個(gè)直接子類:子類

Error代表一些很難恢復(fù)的嚴(yán)重的系統(tǒng)錯(cuò)誤,不是用戶程序本身所能控制的。所以一般不用捕獲與處理Error,而是交給Java運(yùn)行系統(tǒng)處理。子類Exception代表用戶程序可以捕獲的異常情況。子類RuntimeException代表程序設(shè)計(jì)或?qū)崿F(xiàn)上的問題,如除數(shù)為零或者數(shù)組越界等。這類異常經(jīng)常出現(xiàn),如果全部做出處理,會(huì)影響程序的可讀性和效率。所以這類異常,程序可以處理,也可以交給Java運(yùn)行系統(tǒng)自動(dòng)處理。其他子類(例如IOException,ClassNotFoundException

等)程序中必須捕獲并處理這些異常,或者聲明拋棄這些異常。ErrorExceptionRuntimeExceptionThrowableIOExceptionClassNotFoundException……107.2異常處理7.2.1捕獲異常7.2.2聲明拋棄異常7.2.3顯示拋出異常7.2.4自定義異常117.2.1捕獲異常捕獲異常是通過try-catch-finally語(yǔ)句實(shí)現(xiàn)的。其中try語(yǔ)句不能單獨(dú)使用,必須和catch或者finally語(yǔ)句配合使用。為了防止并處理一個(gè)運(yùn)行時(shí)的錯(cuò)誤,需要把可能出錯(cuò)的代碼放進(jìn)try語(yǔ)句塊中。當(dāng)try語(yǔ)句塊中的某條語(yǔ)句發(fā)生異常,該塊中余下的語(yǔ)句將不再執(zhí)行,而是轉(zhuǎn)到catch語(yǔ)句中去執(zhí)行。12

importjava.io.*; publicclassE7_3{ publicstaticvoidmain(String

args[]){ try{

inti=7/0;

System.out.println("該語(yǔ)句會(huì)不會(huì)執(zhí)行?"); } catch(ArithmeticExceptione){

System.out.println("出現(xiàn)錯(cuò)誤:" +e.getMessage()); }} }try語(yǔ)句塊catch語(yǔ)句塊13catch語(yǔ)句catch(ArithmeticException

e)catch之后的括號(hào)中是一個(gè)參數(shù)e,e是算術(shù)異常類的一個(gè)對(duì)象。當(dāng)try語(yǔ)句塊中有異常發(fā)生時(shí),Java系統(tǒng)會(huì)自動(dòng)拋出一個(gè)異常對(duì)象;然后系統(tǒng)把這個(gè)異常對(duì)象的類型與catch塊中的異常類型進(jìn)行比較,如果匹配,則把拋出的異常對(duì)象傳遞給參數(shù)e。最后再執(zhí)行catch語(yǔ)句塊中的語(yǔ)句進(jìn)行異常的處理。14多條catch語(yǔ)句如果try語(yǔ)句塊中可能發(fā)生多種異常,則可以使用多個(gè)catch語(yǔ)句分別捕獲;如果這些異常具有繼承關(guān)系,則必須先捕獲子類型的異常,再捕獲父類型的異常。15

publicclassE7_5{ publicstaticvoidmain(String

args[]){ try{

inti=7/0;

System.out.println("該語(yǔ)句會(huì)不會(huì)執(zhí)行?"); } catch(Exceptione){

System.out.println(e); } catch(ArithmeticExceptione){

System.out.println(e); }} }16finally語(yǔ)句塊

finally語(yǔ)句在異常處理機(jī)制中起到收尾工作,用來保證程序的正確性。例如打開一個(gè)文件失敗,程序處理完異常之后就會(huì)退出,但是這時(shí)如果文件還沒有關(guān)閉,這樣可能會(huì)造成文件內(nèi)容的遺失,所以必須先關(guān)閉該文件,才能退出異常的處理。而關(guān)閉文件的操作就放在finally語(yǔ)句塊中。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聲明拋棄異常如果一個(gè)方法method()中可能產(chǎn)生一個(gè)異常,但是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運(yùn)行系統(tǒng)如果要一次拋棄多個(gè)異常,則用逗號(hào)分隔開,如下所示:voidmethod()throwsIOException,FileNotFoundException{}217.2.3顯示拋出異常通常,異常對(duì)象是由Java系統(tǒng)自動(dòng)拋出(throw)的。程序員也可以在程序中根據(jù)條件顯示拋出(throw)一個(gè)異常。throw語(yǔ)句之后的語(yǔ)句將不再執(zhí)行,轉(zhuǎn)到catch語(yǔ)句塊中去執(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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論