版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
異常處理
異?;靖拍钕到y(tǒng)異常類用戶自定義異常異常處理異常轉(zhuǎn)移一、異常處理機(jī)制當(dāng)方法執(zhí)行過(guò)程中出現(xiàn)錯(cuò)誤而干擾了程序流程時(shí),會(huì)拋出一個(gè)異常,即構(gòu)造出一個(gè)異常類的對(duì)象。異常類對(duì)象代表當(dāng)前出現(xiàn)的一個(gè)具體異常,該對(duì)象封裝了異常的有關(guān)信息。異常分為系統(tǒng)定義異常和用戶自定義異常。異常拋出方式:系統(tǒng)定義異常-自動(dòng)拋出用戶自定義異常-用throw語(yǔ)句拋出方法中的異常處理:捕獲異常,就地解決,并使程序繼續(xù)執(zhí)行。將異常向外轉(zhuǎn)移,即將異常拋出方法之外,由調(diào)用該方法的環(huán)境去處理。程序中的異常處理可以提高程序的健壯性二、異常與異常類Throwable類Exception類Error類自定義異常類ArrayIndexOutOfBoundsException
類NullPointerException
類...1.系統(tǒng)異常類的層次結(jié)構(gòu)2.系統(tǒng)定義的異常類Error類定義的錯(cuò)誤是致命性錯(cuò)誤,一般會(huì)導(dǎo)致程序停止執(zhí)行。Exception類定義的是較輕的錯(cuò)誤,你可以編寫代碼來(lái)處理這類錯(cuò)誤,并繼續(xù)程序的執(zhí)行。系統(tǒng)預(yù)定義異常類及含義系統(tǒng)預(yù)定義的異常類異常對(duì)應(yīng)的運(yùn)行錯(cuò)誤說(shuō)明ClassNotFoundException類型轉(zhuǎn)換異常:如找不到要裝載的類。IllegalArgumentException非法參數(shù)異常:可用于檢查方法參數(shù)的合法性。ArrayIndexOutOfBoundsException下標(biāo)越界異常:一般指數(shù)組下標(biāo)越界。FileNotFoundException找不到文件異常:未找到指定的文件或目錄。IOException輸入輸出異常:在輸入輸出操作時(shí)產(chǎn)生的異常。NullPointerException空指針異常:訪問(wèn)空的尚未實(shí)例化的引用型變量。ArithmeticException數(shù)學(xué)異常:如數(shù)學(xué)運(yùn)算被零除等。SecurityException安全性異常:如Applet小程序要讀寫文件。3.Exception類構(gòu)造函數(shù)Exception()Exception(String異常描述)方法StringgetMessage()
-返回異常描述StringtoString()
-返回異常對(duì)象詳細(xì)信息。voidprintStackTrace()
打印異常發(fā)生的路徑,即引起異常的方法調(diào)用嵌套序列4.用戶定義異常類用戶自定義異常主要用來(lái)處理用戶程序中特定的邏輯運(yùn)行錯(cuò)誤。定義異常類:classMyExpextendsException{//或繼承其他異常類
...//定義新的屬性
...//重載構(gòu)造函數(shù)
...//重載原方法,或定義新方法
}例1:用戶自定義異常。下面代碼定義一個(gè)異常類,用于表示超時(shí)異常。classTimeOutExceptionextendsException
{ privateStringreason; privateStringip; privateintport;
publicTimeOutException(Strings,StringserverIP,intserverPort) { reason=s; ip=serverIP; port=serverPort; }
publicStringgetReason(){ returnreason; } publicStringgetIp(){ returnip; } publicintgetPort(){ returnport; } publicStringtoString() { return"Exception:ipis"+ip+"portis"+port+"thereasonis"+reason;
}}4.用戶定義異常類定義好異常類后,程序中就可以拋出、捕獲并處理該類型的異常publicclassExceptionTest{ publicstaticvoidmain(String[]args) {
try {
thrownewTimeOutException(”Connecttimeout”,”166.111.8.28”,80); }
catch(TimeOutExceptione) {
System.out.println(e);
} }}三、異常處理概念:警戒區(qū)-可能會(huì)引起異常的代碼段
try{
警戒區(qū)代碼(try塊) //拋出異常
}catch(ExceptTypee){ //捕獲異常 異常處理代碼 //處理異常
}
后續(xù)語(yǔ)句若try塊中沒(méi)有異常,則try塊執(zhí)行完,控制轉(zhuǎn)向后續(xù)語(yǔ)句。若try塊中出現(xiàn)異常,則控制轉(zhuǎn)向下面的異常處理部分,然后執(zhí)行后續(xù)語(yǔ)句。要捕獲的異常類對(duì)象1.拋出異常
(1)系統(tǒng)自動(dòng)拋出異常例2:系統(tǒng)自動(dòng)拋出異常。publicclassa{ publicstaticvoidmain(String[]args) { inti; int[]array={21,33,52,44,98}; try { while(true) { i=(int)(Math.random()*10); System.out.println(”下標(biāo)為”+i+”的數(shù)組元素是”+array[i]);} } catch(ArrayIndexOutOfBoundsExceptione) {
System.out.println(”出現(xiàn)數(shù)組下標(biāo)越界異?!?;
} }}系統(tǒng)自動(dòng)拋出異常。publicclassa{ publicstaticvoidmain(String[]args) { int[]array={21,33,52,44,98}; try { System.out.println(array[6]); } catch(ArrayIndexOutOfBoundsExceptione) {
System.out.println(”出現(xiàn)數(shù)組下標(biāo)越界異?!?;
} }}(2)直接拋出異常(throw語(yǔ)句)適用于用戶自定義異常格式: 生成異常類的實(shí)例e; throwe;或: thrownew異常類構(gòu)造方法例3:直接拋出異常。publicclassThrowException{ publicstaticvoidmain(String[]args) {
try{ thrownewArithmeticException(); } catch(ArithmeticExceptione){System.out.println(e);}
try{ thrownewArrayIndexOutOfBoundsException();} catch(ArrayIndexOutOfBoundsExceptione){ System.out.println(e); } System.out.println("throwanexception"); }}(3)間接拋出異常(throws)也稱為異常轉(zhuǎn)移異??偸前l(fā)生在方法執(zhí)行過(guò)程中。當(dāng)方法代碼不對(duì)異常處理時(shí),異常會(huì)向方法外轉(zhuǎn)移。系統(tǒng)定義的異常自動(dòng)向外轉(zhuǎn)移。用戶自定義的異常要轉(zhuǎn)移需要在方法頭聲明一下例4:間接拋出異常(throws)。publicclassThrowsException{ publicstaticvoidmain(String[]args)throwsRuntimeException {
try{ thrownewArithmeticException(); } catch(ArithmeticExceptione) { System.out.println("throwexception:"+e); } throwsException();
System.out.println("throwsexception");//沒(méi)有執(zhí)行 }
staticvoidthrowsException()throwsRuntimeException { try{thrownewArrayIndexOutOfBoundsException(); } catch(ArrayIndexOutOfBoundsExceptione) { System.out.println("throwexception:"+e);
thrownewArrayIndexOutOfBoundsException(); } }}(4)檢查型異常處理(5)運(yùn)行時(shí)異常運(yùn)行時(shí)異常都繼承自RuntimeException類publicdoubledivide(inta,intb){returna/b;}try{ //可能出現(xiàn)異常的代碼}catch(異常類型1e1){ //處理異常類型1}catch(異常類型2e2){ //處理異常類型2}……catch(異常類型3e3){ //處理異常類型3}finally{ //該代碼塊在try塊執(zhí)行后完成必做的事情}2.異常的捕獲與處理例5:從鍵盤讀取兩個(gè)整數(shù),用第一個(gè)整數(shù)除以第二個(gè)整數(shù),并輸出結(jié)果。如果在程序讀取數(shù)據(jù)的過(guò)程中發(fā)生異常,則將捕獲該異常并處理。importjava.io.*;publicclassCatchException{ publicstaticintgetInteger() { BufferedReaderinput=new BufferedReader(newInputStreamReader(System.in));
try{returnInteger.parseInt(input.readLine().trim()); } catch(Exceptione){ e.printStackTrace();//輸出異常的方法調(diào)用棧 return0; } } publicstaticvoidmain(String[]args) { intn,d,r; System.out.println("EnteroneInteger:"); n=getInteger(); System.out.println("EnteranotherInteger:"); d=getInteger();
try{ r=n/d; System.out.println(n+"/"+d+"="+r); } catch(ArithmeticExceptione){e.printStackTrace();} System.out.println("endofprogram"); }}3.多異常處理try{...}//可處理多種異常catch(異常類1e1){...}catch(異常類2e2){...}滿足異常匹配的條件:拋出對(duì)象與catch參數(shù)類型相同拋出對(duì)象為catch參數(shù)類的子類多異常處理中的匹配順序:按先后順序捕獲(注意catch塊書寫時(shí)的排列順序:先具體、后一般),但只捕獲一次。例6:使用多重catch語(yǔ)句classMultiCatch{publicstaticvoidmain(Stringargs[]){try{inta=args.length;System.out.println("a="+a);intb=42/a;intc[]={1};c[42]=99;}catch(ArithmeticExceptione){System.out.println("Divideby0:"+e);}catch(ArrayIndexOutOfBoundsExceptione){System.out.println("Arrayindexoob:"+e);}System.out.println("Aftertry/catchblocks.");}}練習(xí):分析程序運(yùn)行結(jié)果classF1{publicstaticvoidmain(Stringargs[]){try{inta=0;System.out.println("a="+a);intb=42/a;intc[]={1};c[42]=99;}catch(ArithmeticExceptione){System.out.println("Divideby0");}catch(ArrayIndexOutOfBoundsExceptione){System.out.println("Arrayindexoob");}System.out.println("Aftertry/catchblocks.");}}例7:異常處理例-未作異常處理publicclassTest{publicstaticvoidmain(String[]args){TestExceptionte=newTestException();te.m1();//調(diào)用m1方法,對(duì)m1方法的異常未做處理
}}classTestException{
privateinti;privateint[]array={1,2,3,4,5};//定義一個(gè)含5個(gè)元素的數(shù)組
voidm1(){//該方法中會(huì)出現(xiàn)數(shù)組下標(biāo)越界異常,且無(wú)處理
for(intj=0;j<10;j++){
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 課題申報(bào)參考:健康老齡化背景下社區(qū)老年運(yùn)動(dòng)健康促進(jìn)典型案例與創(chuàng)新模式研究
- 2025版大型商業(yè)綜合體水電安裝工程分包合同范本2篇
- 二零二五年度生物醫(yī)藥創(chuàng)新平臺(tái)建設(shè)合同:地方政府與生物醫(yī)藥企業(yè)的合作3篇
- 2025版學(xué)校食堂承包合同包含食品安全培訓(xùn)與監(jiān)督3篇
- 2025版微信公眾號(hào)與電商平臺(tái)跨界合作服務(wù)合同3篇
- 二零二五版綠化苗木培育與種植服務(wù)合同3篇
- 二零二五年度城市基礎(chǔ)設(shè)施大數(shù)據(jù)信息服務(wù)與維護(hù)合同4篇
- 二零二五年度便利店便利店加盟店員勞動(dòng)合同3篇
- 2025年二手車買賣廣告宣傳合作協(xié)議4篇
- 二零二五年度便利店品牌授權(quán)及區(qū)域保護(hù)合同3篇
- 銷售與銷售目標(biāo)管理制度
- 人教版(2025新版)七年級(jí)下冊(cè)英語(yǔ):寒假課內(nèi)預(yù)習(xí)重點(diǎn)知識(shí)默寫練習(xí)
- 2024年食品行業(yè)員工勞動(dòng)合同標(biāo)準(zhǔn)文本
- 全屋整裝售后保修合同模板
- 高中生物學(xué)科學(xué)推理能力測(cè)試
- GB/T 44423-2024近紅外腦功能康復(fù)評(píng)估設(shè)備通用要求
- 2024-2030年中國(guó)減肥行業(yè)市場(chǎng)發(fā)展分析及發(fā)展趨勢(shì)與投資研究報(bào)告
- 死亡報(bào)告年終分析報(bào)告
- 棋牌室禁止賭博警示語(yǔ)
- 2022-2023學(xué)年四川省南充市九年級(jí)(上)期末數(shù)學(xué)試卷
- 公轉(zhuǎn)私人轉(zhuǎn)賬協(xié)議
評(píng)論
0/150
提交評(píng)論