Java精解案例教程-第8課-Java異常處理課件_第1頁(yè)
Java精解案例教程-第8課-Java異常處理課件_第2頁(yè)
Java精解案例教程-第8課-Java異常處理課件_第3頁(yè)
Java精解案例教程-第8課-Java異常處理課件_第4頁(yè)
Java精解案例教程-第8課-Java異常處理課件_第5頁(yè)
已閱讀5頁(yè),還剩41頁(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異常處理第八章Java異常處理1本章內(nèi)容Java異常的概念和處理機(jī)制Java異常的分類(lèi)異常的捕獲、處理和拋出使用用戶(hù)自定義異常本章內(nèi)容Java異常的概念和處理機(jī)制2Java異常Java程序運(yùn)行過(guò)程中所發(fā)生的異常事件可分為兩類(lèi):錯(cuò)誤(Error):JVM系統(tǒng)內(nèi)部錯(cuò)誤、資源耗盡等嚴(yán)重情況違例(Exception):其它因編程錯(cuò)誤或偶然的外在因素導(dǎo)致的一般性問(wèn)題,例如:對(duì)負(fù)數(shù)開(kāi)平方根空指針訪(fǎng)問(wèn)試圖讀取不存在的文件網(wǎng)絡(luò)連接中斷Java異常Java程序運(yùn)行過(guò)程中所發(fā)生的異常事件可分為兩類(lèi)3Java異常舉例(1)(0801)publicclassTest8_1{ publicstaticvoidmain(String[]args){ Stringfriends[]={"lisa","bily","kessy"}; for(inti=0;i<5;i++){ System.out.println(friends[i]); } System.out.println("\nthisistheend");}}Java異常舉例(1)(0801)publicclass4Java異常舉例(2)程序Test8_1運(yùn)行結(jié)果:javaTest8_1lisabilykessyExceptioninthread"main"java.lang.ArrayIndexOutOfBoundsExceptionatTest8_1.main(Test8_1.java:5)Pressanykeytocontinue...Java異常舉例(2)程序Test8_1運(yùn)行結(jié)果:java5Java異常類(lèi)層次Java異常類(lèi)層次6常見(jiàn)異常RuntimeException錯(cuò)誤的類(lèi)型轉(zhuǎn)換數(shù)組下標(biāo)越界空指針訪(fǎng)問(wèn)IOExeption從一個(gè)不存在的文件中讀取數(shù)據(jù)越過(guò)文件結(jié)尾繼續(xù)讀取連接一個(gè)不存在的URL常見(jiàn)異常RuntimeException7異常處理機(jī)制Java程序的執(zhí)行過(guò)程中如出現(xiàn)異常,會(huì)自動(dòng)生成一個(gè)異常類(lèi)對(duì)象,該異常對(duì)象將被提交給Java運(yùn)行時(shí)系統(tǒng),這個(gè)過(guò)程稱(chēng)為拋出(throw)異常。當(dāng)Java運(yùn)行時(shí)系統(tǒng)接收到異常對(duì)象時(shí),會(huì)尋找能處理這一異常的代碼并把當(dāng)前異常對(duì)象交給其處理,這一過(guò)程稱(chēng)為捕獲(catch)異常。如果Java運(yùn)行時(shí)系統(tǒng)找不到可以捕獲異常的方法,則運(yùn)行時(shí)系統(tǒng)將終止,相應(yīng)的Java程序也將退出。程序員通常只能處理違例(Exception),而對(duì)錯(cuò)誤(Error)無(wú)能為力異常處理機(jī)制Java程序的執(zhí)行過(guò)程中如出現(xiàn)異常,會(huì)自動(dòng)生成一8異常處理舉例(1)(0802)publicclassTest8_2{ publicstaticvoidmain(String[]args){ Stringfriends[]={"lisa","bily","kessy"}; try{ for(inti=0;i<5;i++){ System.out.println(friends[i]); } }catch(java.lang.ArrayIndexOutOfBoundsExceptione){System.out.println("indexerr"); } System.out.println("\nthisistheend");}}異常處理舉例(1)(0802)publicclassTe9異常處理舉例(2)程序java8_2運(yùn)行結(jié)果:javajava8_2lisabilykessyindexerrthisistheendPressanykeytocontinue...異常處理舉例(2)程序java8_2運(yùn)行結(jié)果:javaja10捕獲違例

捕獲異常是通過(guò)try-catch-finally語(yǔ)句實(shí)現(xiàn)的。try{ ...... //可能產(chǎn)生違例的代碼}catch(ExceptionName1e){ ...... //當(dāng)產(chǎn)生ExceptionName1型違例時(shí)的處置措施}catch(ExceptionName2e){...... //當(dāng)產(chǎn)生ExceptionName2型違例時(shí)的處置措施}[finally{...... //無(wú)條件執(zhí)行的語(yǔ)句 }]捕獲違例 捕獲異常是通過(guò)try-catch-finally語(yǔ)11捕獲違例try

捕獲違例的第一步是用try{…}語(yǔ)句塊選定捕獲違例的范圍。catch

在catch語(yǔ)句塊中是對(duì)違例對(duì)象進(jìn)行處理的代碼,每個(gè)try語(yǔ)句塊可以伴隨一個(gè)或多個(gè)catch語(yǔ)句,用于處理可能產(chǎn)生的不同類(lèi)型的違例對(duì)象。與其它對(duì)象一樣,可以訪(fǎng)問(wèn)一個(gè)違例對(duì)象的成員變量或調(diào)用它的方法。getMessage()方法,用來(lái)得到有關(guān)異常事件的信息printStackTrace()用來(lái)跟蹤異常事件發(fā)生時(shí)執(zhí)行堆棧的內(nèi)容。捕獲違例try12捕獲違例finally捕獲例外的最后一步是通過(guò)finally語(yǔ)句為例外處理提供一個(gè)統(tǒng)一的出口,使得在控制流轉(zhuǎn)到程序的其它部分以前,能夠?qū)Τ绦虻臓顟B(tài)作統(tǒng)一的管理。不論在try代碼塊中是否發(fā)生了異常事件,finally塊中的語(yǔ)句都會(huì)被執(zhí)行。finally語(yǔ)句是任選的捕獲違例finally13IOException違例處理舉例(1)(0803)importjava.io.*;publicclassTest8_3{ publicstaticvoidmain(String[]args){ FileInputStreamin=newFileInputStream("myfile.txt"); intb; b=in.read(); while(b!=-1){System.out.print((char)b); b=in.read(); } in.close();}}IOException違例處理舉例(1)(0803)impo14IOException違例處理舉例(2)程序Test8_3編譯結(jié)果:E:\ex\javacTest8_3.javaE:\ex\Test8_3.java:4:未報(bào)告的異常java.io.FileNotFoundException;必須被捕獲或被聲明拋出 FileInputStreamin=newFileInputStream("myfile.txt");^E:\ex\Test8_3.java:6:未報(bào)告的異常java.io.IOException;必須被捕獲或被聲明拋出 b=in.read();^E:\ex\Test8_3.java:9:未報(bào)告的異常java.io.IOException;必須被捕獲或被聲明拋出b=in.read();^E:\ex\Test8_3.java:11:未報(bào)告的異常java.io.IOException;必須被捕獲或被聲明拋出in.close();^4個(gè)錯(cuò)誤IOException違例處理舉例(2)程序Test8_3編15IOException違例處理舉例(3)(0804)importjava.io.*;publicclassTest8_4{ publicstaticvoidmain(String[]args){ try{ FileInputStreamin=newFileInputStream("myfile.txt"); intb; b=in.read(); while(b!=-1){ System.out.print((char)b); b=in.read(); } in.close(); }catch(IOExceptione){ System.out.println(e); }finally{ System.out.println("It’sok!"); } }}IOException違例處理舉例(3)(0804)impo16聲明拋棄違例(0805)聲明拋棄違例是Java中處理違例的第二種方式如果一個(gè)方法(中的語(yǔ)句執(zhí)行時(shí))可能生成某種違例,但是并不能確定如何處理這種違例,則此方法應(yīng)聲明拋棄違例,表明該方法將不對(duì)這些違例進(jìn)行處理,而由該方法的調(diào)用者負(fù)責(zé)處理聲明拋棄舉例: publicvoidreadFile(Stringfile) throwsFileNotFoundException{ ……

//讀文件的操作可能產(chǎn)生FileNotFoundException類(lèi)型的違例 FileInputStreamfis=newFileInputStream(file); ..……}聲明拋棄違例(0805)聲明拋棄違例是Java中處理違例的第17聲明拋棄違例舉例importjava.io.*;publicclassTest8_5{ publicstaticvoidmain(String[]args){ Test8_5t=newTest8_5(); try{

t.readFile(); }catch(IOExceptione){System.out.println(e);} } publicvoidreadFile()throwsIOException{ FileInputStreamin=newFileInputStream("myfile.txt"); intb; b=in.read(); while(b!=-1){ System.out.print((char)b); b=in.read(); } in.close(); }}聲明拋棄違例舉例importjava.io.*;18重寫(xiě)方法聲明拋棄違例原則重寫(xiě)方法不能拋出比被重寫(xiě)方法范圍更大的違例類(lèi)型publicclassA{ publicvoidmethodA()throwsIOException{ …… }}publicclassB1extendsTestA{ publicvoidmethodA()throwsFileNotFoundException{ …… }}publicclassB2extendsTestA{ publicvoidmethodA()throwsException{ …… }}重寫(xiě)方法聲明拋棄違例原則重寫(xiě)方法不能拋出比被重寫(xiě)方法范圍更大19拋棄例外Java異常類(lèi)對(duì)象除在程序執(zhí)行過(guò)程中出現(xiàn)異常時(shí)由系統(tǒng)自動(dòng)生成并拋出,也可根據(jù)需要需要人工創(chuàng)建并拋出首先要生成例外對(duì)象,然后通過(guò)throw語(yǔ)句實(shí)現(xiàn)拋出操作(提交給Java運(yùn)行環(huán)境)。IOExceptione=newIOException();throwe;可以?huà)仐壍睦獗仨毷荰hrowable或其子類(lèi)的實(shí)例。下面的語(yǔ)句在編譯時(shí)將會(huì)產(chǎn)生語(yǔ)法錯(cuò)誤:

thrownewString("wanttothrow");0806/test.java拋棄例外Java異常類(lèi)對(duì)象除在程序執(zhí)行過(guò)程中出現(xiàn)異常時(shí)由系統(tǒng)20創(chuàng)建用戶(hù)自定義例外類(lèi)(0806)用戶(hù)自定義例外類(lèi)MyException,用于描述數(shù)據(jù)取值范圍錯(cuò)誤信息:classMyExceptionextendsException{ privateintidnumber; publicMyException(Stringmessage,intid){ super(message); this.idnumber=id; } publicintgetId(){ returnidnumber; }}創(chuàng)建用戶(hù)自定義例外類(lèi)(0806)用戶(hù)自定義例外類(lèi)MyExce21使用用戶(hù)自定義例外類(lèi)publicclassTest8_6{publicvoidregist(intnum)throwsMyException{ if(num<0){ thrownewMyException("人數(shù)為負(fù)值,不合理",3); }

System.out.println("登記人數(shù)"+num);}publicvoidmanager(){ try{ regist(100); }catch(MyExceptione){ System.out.print("登記失敗,出錯(cuò)種類(lèi)"+e.getId()); } System.out.print("本次登記操作結(jié)束");}publicstaticvoidmain(Stringargs[]){ Test8_6t=newTest8_6(); t.manager();}}使用用戶(hù)自定義例外類(lèi)publicclassTest8_622總結(jié)Java異常的概念和處理機(jī)制Java異常的分類(lèi)異常的捕獲、處理和拋出使用用戶(hù)自定義異??偨Y(jié)Java異常的概念和處理機(jī)制23第八章Java異常處理第八章Java異常處理24本章內(nèi)容Java異常的概念和處理機(jī)制Java異常的分類(lèi)異常的捕獲、處理和拋出使用用戶(hù)自定義異常本章內(nèi)容Java異常的概念和處理機(jī)制25Java異常Java程序運(yùn)行過(guò)程中所發(fā)生的異常事件可分為兩類(lèi):錯(cuò)誤(Error):JVM系統(tǒng)內(nèi)部錯(cuò)誤、資源耗盡等嚴(yán)重情況違例(Exception):其它因編程錯(cuò)誤或偶然的外在因素導(dǎo)致的一般性問(wèn)題,例如:對(duì)負(fù)數(shù)開(kāi)平方根空指針訪(fǎng)問(wèn)試圖讀取不存在的文件網(wǎng)絡(luò)連接中斷Java異常Java程序運(yùn)行過(guò)程中所發(fā)生的異常事件可分為兩類(lèi)26Java異常舉例(1)(0801)publicclassTest8_1{ publicstaticvoidmain(String[]args){ Stringfriends[]={"lisa","bily","kessy"}; for(inti=0;i<5;i++){ System.out.println(friends[i]); } System.out.println("\nthisistheend");}}Java異常舉例(1)(0801)publicclass27Java異常舉例(2)程序Test8_1運(yùn)行結(jié)果:javaTest8_1lisabilykessyExceptioninthread"main"java.lang.ArrayIndexOutOfBoundsExceptionatTest8_1.main(Test8_1.java:5)Pressanykeytocontinue...Java異常舉例(2)程序Test8_1運(yùn)行結(jié)果:java28Java異常類(lèi)層次Java異常類(lèi)層次29常見(jiàn)異常RuntimeException錯(cuò)誤的類(lèi)型轉(zhuǎn)換數(shù)組下標(biāo)越界空指針訪(fǎng)問(wèn)IOExeption從一個(gè)不存在的文件中讀取數(shù)據(jù)越過(guò)文件結(jié)尾繼續(xù)讀取連接一個(gè)不存在的URL常見(jiàn)異常RuntimeException30異常處理機(jī)制Java程序的執(zhí)行過(guò)程中如出現(xiàn)異常,會(huì)自動(dòng)生成一個(gè)異常類(lèi)對(duì)象,該異常對(duì)象將被提交給Java運(yùn)行時(shí)系統(tǒng),這個(gè)過(guò)程稱(chēng)為拋出(throw)異常。當(dāng)Java運(yùn)行時(shí)系統(tǒng)接收到異常對(duì)象時(shí),會(huì)尋找能處理這一異常的代碼并把當(dāng)前異常對(duì)象交給其處理,這一過(guò)程稱(chēng)為捕獲(catch)異常。如果Java運(yùn)行時(shí)系統(tǒng)找不到可以捕獲異常的方法,則運(yùn)行時(shí)系統(tǒng)將終止,相應(yīng)的Java程序也將退出。程序員通常只能處理違例(Exception),而對(duì)錯(cuò)誤(Error)無(wú)能為力異常處理機(jī)制Java程序的執(zhí)行過(guò)程中如出現(xiàn)異常,會(huì)自動(dòng)生成一31異常處理舉例(1)(0802)publicclassTest8_2{ publicstaticvoidmain(String[]args){ Stringfriends[]={"lisa","bily","kessy"}; try{ for(inti=0;i<5;i++){ System.out.println(friends[i]); } }catch(java.lang.ArrayIndexOutOfBoundsExceptione){System.out.println("indexerr"); } System.out.println("\nthisistheend");}}異常處理舉例(1)(0802)publicclassTe32異常處理舉例(2)程序java8_2運(yùn)行結(jié)果:javajava8_2lisabilykessyindexerrthisistheendPressanykeytocontinue...異常處理舉例(2)程序java8_2運(yùn)行結(jié)果:javaja33捕獲違例

捕獲異常是通過(guò)try-catch-finally語(yǔ)句實(shí)現(xiàn)的。try{ ...... //可能產(chǎn)生違例的代碼}catch(ExceptionName1e){ ...... //當(dāng)產(chǎn)生ExceptionName1型違例時(shí)的處置措施}catch(ExceptionName2e){...... //當(dāng)產(chǎn)生ExceptionName2型違例時(shí)的處置措施}[finally{...... //無(wú)條件執(zhí)行的語(yǔ)句 }]捕獲違例 捕獲異常是通過(guò)try-catch-finally語(yǔ)34捕獲違例try

捕獲違例的第一步是用try{…}語(yǔ)句塊選定捕獲違例的范圍。catch

在catch語(yǔ)句塊中是對(duì)違例對(duì)象進(jìn)行處理的代碼,每個(gè)try語(yǔ)句塊可以伴隨一個(gè)或多個(gè)catch語(yǔ)句,用于處理可能產(chǎn)生的不同類(lèi)型的違例對(duì)象。與其它對(duì)象一樣,可以訪(fǎng)問(wèn)一個(gè)違例對(duì)象的成員變量或調(diào)用它的方法。getMessage()方法,用來(lái)得到有關(guān)異常事件的信息printStackTrace()用來(lái)跟蹤異常事件發(fā)生時(shí)執(zhí)行堆棧的內(nèi)容。捕獲違例try35捕獲違例finally捕獲例外的最后一步是通過(guò)finally語(yǔ)句為例外處理提供一個(gè)統(tǒng)一的出口,使得在控制流轉(zhuǎn)到程序的其它部分以前,能夠?qū)Τ绦虻臓顟B(tài)作統(tǒng)一的管理。不論在try代碼塊中是否發(fā)生了異常事件,finally塊中的語(yǔ)句都會(huì)被執(zhí)行。finally語(yǔ)句是任選的捕獲違例finally36IOException違例處理舉例(1)(0803)importjava.io.*;publicclassTest8_3{ publicstaticvoidmain(String[]args){ FileInputStreamin=newFileInputStream("myfile.txt"); intb; b=in.read(); while(b!=-1){System.out.print((char)b); b=in.read(); } in.close();}}IOException違例處理舉例(1)(0803)impo37IOException違例處理舉例(2)程序Test8_3編譯結(jié)果:E:\ex\javacTest8_3.javaE:\ex\Test8_3.java:4:未報(bào)告的異常java.io.FileNotFoundException;必須被捕獲或被聲明拋出 FileInputStreamin=newFileInputStream("myfile.txt");^E:\ex\Test8_3.java:6:未報(bào)告的異常java.io.IOException;必須被捕獲或被聲明拋出 b=in.read();^E:\ex\Test8_3.java:9:未報(bào)告的異常java.io.IOException;必須被捕獲或被聲明拋出b=in.read();^E:\ex\Test8_3.java:11:未報(bào)告的異常java.io.IOException;必須被捕獲或被聲明拋出in.close();^4個(gè)錯(cuò)誤IOException違例處理舉例(2)程序Test8_3編38IOException違例處理舉例(3)(0804)importjava.io.*;publicclassTest8_4{ publicstaticvoidmain(String[]args){ try{ FileInputStreamin=newFileInputStream("myfile.txt"); intb; b=in.read(); while(b!=-1){ System.out.print((char)b); b=in.read(); } in.close(); }catch(IOExceptione){ System.out.println(e); }finally{ System.out.println("It’sok!"); } }}IOException違例處理舉例(3)(0804)impo39聲明拋棄違例(0805)聲明拋棄違例是Java中處理違例的第二種方式如果一個(gè)方法(中的語(yǔ)句執(zhí)行時(shí))可能生成某種違例,但是并不能確定如何處理這種違例,則此方法應(yīng)聲明拋棄違例,表明該方法將不對(duì)這些違例進(jìn)行處理,而由該方法的調(diào)用者負(fù)責(zé)處理聲明拋棄舉例: publicvoidreadFile(Stringfile) throwsFileNotFoundException{ ……

//讀文件的操作可能產(chǎn)生FileNotFoundException類(lèi)型的違例 FileInputStreamfis=newFileInputStream(file); ..……}聲明拋棄違例(0805)聲明拋棄違例是Java中處理違例的第40聲明拋棄違例舉例importjava.io.*;publicclassTest8_5{ publicstaticvoidmain(String[]args){ Test8_5t=newTest8_5(); try{

t.readFile(); }catch(IOExceptione){System.out.println(e);} } publicvoidreadFile()throwsIOException{ FileInputStreamin=newFileInputStream("myfile.txt"); intb; b=in.read(); while(b!=-1){ System.out.print((char)b); b=in.read(); } in.close(); }}聲明拋棄違例舉例importjava.io.*;41重寫(xiě)方法聲明拋棄違例原則重寫(xiě)方法不能拋出比被重寫(xiě)方法范圍更大的違例類(lèi)型publicclassA{ publicvoidmethodA()throwsIOException{ …… }}publicclassB1extendsTestA{ publicvoidmethodA()throwsFileNotFoundException{ …… }}publicclassB2extendsTestA{ publicvoidmethodA()t

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論