Java學(xué)習(xí)之異常處理_第1頁
Java學(xué)習(xí)之異常處理_第2頁
Java學(xué)習(xí)之異常處理_第3頁
Java學(xué)習(xí)之異常處理_第4頁
Java學(xué)習(xí)之異常處理_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第7章

異常處理

本章主要講述如下內(nèi)容:

異常的層次結(jié)構(gòu);

異常處理語句;

自定義異常;

異常處理中常用的調(diào)試方法。

江西新華電腦學(xué)院生活中的異常正常情況下,小王每日開車去上班,耗時大約30分鐘但是,異常情況遲早要發(fā)生!一路暢通堵車!撞車!2程序中的異常publicclassTestException{publicstaticvoidmain(String[]args){("請輸入課程代號(1至3之間的數(shù)字):");Scannerin=newScanner(System.in);intcourseCode=in.nextInt();//從鍵盤輸入整數(shù)switch(courseCode){case1:System.out.println("C#編程");break;case2:System.out.println("Java編程");break;}}}輸入:2輸出:Java編程輸入:B程序中斷運行!正常情況:異常情況:3什么是異常異常就是在程序的運行過程中發(fā)生的不正常的事件,它會中斷正在運行的程序繞行或者等待請求交警解決異常!面對異常該怎么辦呢?通常情況下,我們會這樣處理:程序運行程序中斷運行堵車!撞車!生活中,我們會根據(jù)不同的異常進行相應(yīng)的處理,而不會就此中斷我們的生活4什么是異常處理Java編程語言使用異常處理機制為程序提供了錯誤處理的能力程序中預(yù)先想好了對付異常的處理方法異常!程序運行處理完畢,程序繼續(xù)運行對異常進行處理5簡介在Java中,提供了錯誤捕捉和處理機制,即異常處理機制。在程序運行過程中發(fā)生錯誤時,Java允許其不按照正常路徑完成任務(wù),由發(fā)現(xiàn)錯誤的方法拋出封裝了錯誤信息的對象〔異?!车狡湔{(diào)用程序,發(fā)出已經(jīng)發(fā)生問題的信號,然后立即退出而且,程序并不在調(diào)用該方法的代碼處繼續(xù)執(zhí)行,而是由異常處理機制開始搜索一個能夠處理這種特定錯誤情況的異常處理器。67.1 異常的層次結(jié)構(gòu)

Throwable是異常類的根節(jié)點,定義在java.lang包,它的子類也定義在該包中;Error代表系統(tǒng)錯誤類,由系統(tǒng)直接處理;Exception類及其子類是在程序中可捕捉到的異常。見圖7.17聲明拋出異常Exception類有下面幾個常用的構(gòu)造方法:97.1 異常的層次結(jié)構(gòu)(續(xù))1.0作除數(shù)〔包括模〕,將產(chǎn)生這類異常。例如:intx=0,y;y=100/x;2.例如:inta[]=newint[10];a[10]=0;107.1 異常的層次結(jié)構(gòu)(續(xù))3.

例如:inta[]=newint[10];booleanb[]=newboolean[10]; System.arraycopy(a,0,b,3,6);//有異常

4.例如: Objectobj=newObject(); inta[]=(int[])(obj);117.1 異常的層次結(jié)構(gòu)(續(xù))5.

例如:charch="ABC".charAt(99);

注意:2是5的子類。 6.例如:inta[]=newint[-10];127.1 異常的層次結(jié)構(gòu)(續(xù))7.

例如:inta[]=null; System.out.print(a.length);137.2 異常處理語句

缺省的異常處理的情況,例如:

publicclassDefaultException{//程序7-1publicstaticvoidmain(Stringargs[]){ inta,b=0;

a=2/b;//此處有異常

System.out.println(“a=”+a);//不運行此行}}14Java中如何進行異常處理Java的異常處理是通過5個關(guān)鍵字來實現(xiàn)的:try、catch、finally、throw、throws捕獲異常catchtryfinally執(zhí)行可能產(chǎn)生異常的代碼捕獲異常無論是否發(fā)生異常,代碼總能執(zhí)行手動拋出異常拋出異常throw聲明異常聲明方法可能要拋出的各種異常throws157.2 異常處理語句(續(xù))

異常處理語句有try、catch、finally、throw和throws。異常處理的形式為:

try{

程序執(zhí)行體}catch(異常類型1異常對象1){ 異常處理程序體1}catch(異常類型2異常對象2){ 異常處理程序體2}finally{

異常處理結(jié)束前的執(zhí)行程序體}167.2.1 try和catch語句

try語句指明可能產(chǎn)生異常的代碼段;catch語句在try語句之后,用于捕捉異常,一個try語句可以有多個catch語句與之匹配。異常處理以后,程序從try語句代碼段后繼續(xù)執(zhí)行。例如:程序7-2。

17publicclassTryCatchTest{//程序7-2publicstaticvoidmain(Stringargs[]){ inta=99,b=0,c;

try{ ("產(chǎn)生異常之前");

c=a/b;//該行有異常

("產(chǎn)生異常之后"); }catch(ArrayIndexOutOfBoundsExceptione){

("處理下標(biāo)越界異常"); }catch(ArithmeticExceptione){

("處理算術(shù)異常"); }

("異常處理結(jié)束");}}7.2.1 try和catch語句(續(xù))注意:用catch語句捕捉異常時,假設(shè)找不到相匹配的catch語句,將執(zhí)行缺省的異常處理。例如:inta=99,b=0,c;

try{ c=a/b;//產(chǎn)生的異常和捕捉的異常類型不一致}catch(ArrayIndexOutOfBoundsExceptione){ ("處理異常");}197.2.1 try和catch語句(續(xù))注意:當(dāng)有多個catch語句時,系統(tǒng)依照先后順序逐個檢查。例如:try{ c=a/b; }catch(ArithmeticExceptione){ System.out.println("Dividedbyzero");}catch(RuntimeExceptione){ System.out.println("Dividedbyzero");}207.2.2 finally語句

無論是否產(chǎn)生異常,finally語句指明的代碼一定被執(zhí)行。例如:publicclasstestFinally{//程序7-3publicstaticvoidmain(Stringargs[]){ inta,b=0;

for(inti=0;i<=3;i++){ System.out.println("TestNo:"+(i+1));21 try{ switch(i){ case0:a=3/b;

break; case1:intc[]=newint[10]; c[10]=0;

break; case2:charch="ABC".charAt(99);

break; case3:return; } }catch(ArithmeticExceptione){ (“零作除數(shù)!”); }catch(ArrayIndexOutOfBoundsExceptione){ ("數(shù)組下標(biāo)越界!");}catch(IndexOutOfBoundsExceptione){ ("下標(biāo)越界!");}finally{ ("在finally塊中!"); }}}}程序運行結(jié)果:TestNo:1

零作除數(shù)!在finally塊中!TestNo:2

數(shù)組下標(biāo)越界!在finally塊中!TestNo:3

下標(biāo)越界!在finally塊中!TestNo:4

在finally塊中!7.2.3 throw語句

throw語句用于指出當(dāng)前行有異常,當(dāng)程序執(zhí)行到throw語句時,流程就轉(zhuǎn)到相匹配的異常處理語句,所在的方法也不再返回值。throw語句可以將異常對象提交給調(diào)用者,以進行再次處理。例如:程序7-4。25publicclassThrowException{//程序7-4publicstaticvoidTest(){ try{ intc[]=newint[10]; c[10]=0; }catch(ArrayIndexOutOfBoundsExceptione){ System.out.println("\t數(shù)組下標(biāo)越界!");

throwe;//拋出點

//System.out.println("\t產(chǎn)生異常后!"); } }publicstaticvoidmain(Stringargs[]){ try{ Test(); }catch(IndexOutOfBoundsExceptione){

System.out.println("\t下標(biāo)越界!"); }finally{ System.out.println("\t在finally塊中!"); }}}程序運行結(jié)果:數(shù)組下標(biāo)越界!下標(biāo)越界!在finally塊中!7.2.4 throws語句

throws語句指明方法中可能要產(chǎn)生的異常類型,由調(diào)用者進行異常處理。例如:28importjava.io.*;//程序7-6publicclasstestThrows{publicstaticStringreadString()throwsIOException{

intch; Stringr=""; booleandone=false;

while(!done){ ch=System.in.read(); if(ch<0||ch==0xd)done=true; else r=r+(char)ch; } returnr;}注意publicstaticvoidmain(Stringargs[]){ Stringstr;

try{ str=readString(); }catch(IOExceptione){

("產(chǎn)生了輸出/輸出異常");

return; }

("整數(shù)是:"+Integer.parseInt(str));

}}7.2.4 throws語句(續(xù))建議:在多人合作寫程序時,一個方法中產(chǎn)生的異常,最好在該方法中進行處理,不要將異常傳播給其他人處理。

317.3 自定義異常類

通過繼承Exception類或它的子類,實現(xiàn)自定義異常類;對于自定義異常,必須采用throw語句拋出異常,這種類型的異常不會自行產(chǎn)生??傮w上分為兩步:

327.3 自定義異常類(續(xù))

第1步:定義異常類。例如:classuserExceptionextendsException{

intn=0;//計數(shù)器

userException(){n++; }

userException(Strings){

super(s); n++; }

Stringshow(){return"自定義異常對象:"+n; }}337.3 自定義異常類(續(xù))第2步:定義異常對象,并拋出該對象。

例如:34publicclasstestException{//程序7-7

staticvoidTest()throwsuserException{ userExceptione; e=newuserException("自定義異常");

throwe; }

publicstaticvoidmain(Stringargs[]){ try{ Test(); }catch(userExceptione){

System.out.println(e.show()); } }}7.4 異常處理常用調(diào)試方法

在程序中增加輸出變量的信息。

例如:System.out.println("x="+x);通過this輸出當(dāng)前對象的狀態(tài)。例如:(“對象:”+this);

用printstackTrace()輸出異常對象的調(diào)用棧;用getMessage()方法獲取異常信息;用getClass()和getName()獲取異常類名

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論