Java語言程序設(shè)計(jì):JAVA-7-異常_第1頁
Java語言程序設(shè)計(jì):JAVA-7-異常_第2頁
Java語言程序設(shè)計(jì):JAVA-7-異常_第3頁
Java語言程序設(shè)計(jì):JAVA-7-異常_第4頁
Java語言程序設(shè)計(jì):JAVA-7-異常_第5頁
已閱讀5頁,還剩22頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

異常處理異常的概念1異常:把在程序運(yùn)行的過程中出現(xiàn)的、Java能夠捕獲的錯(cuò)誤稱為異常。例如:0做除數(shù)、數(shù)組越界或試圖打開一個(gè)不存在的文件。2在Java語言中,異常的實(shí)質(zhì)是對象。所謂程序發(fā)生了異常,其實(shí)就是指產(chǎn)生了異常對象。3異常的出現(xiàn)是為了當(dāng)程序運(yùn)行出現(xiàn)錯(cuò)誤時(shí),程序還能夠順利執(zhí)行下去,而不是中斷程序。異常處理將會改變程序的控制流程,讓程序有機(jī)會對錯(cuò)誤作出處理。異常對象可以調(diào)用如下方法得到或輸出有關(guān)異常的信息:

publicStringgetMessage();publicvoidprintStackTrace();publicStringtoString();

1 PublicclassHelloWorld{2 publicstaticvoidmain(Stringargs[]){3 inti=0;4 Stringgreetings[]={“HelloWorld!”,”Hello!”,5 “HELLOWORLD!!”};6 while(i<4){7 System.out.println(greetings[i]);8 i++;9 }10 }11 }HelloWorld!Hello!HELLOWORLD!Java.lang.ArrayIndexOutOfBoundsException atHelloWorld.main(HelloWorld.java:7)Java針對各種異常定義了相應(yīng)的異常類。Java.lang.Throwable是這些類的父類。ThrowableErrorExceptionVirtualMachineError...AWTErrorRuntimeException...IOExceptionEOFException...FileNotFoundExceptionArithmeticExceptionNullPointerException...IndexOutOfBoundsExceptionJava中定義的異常分為兩類:

Error

很難恢復(fù)的嚴(yán)重錯(cuò)誤,一般不由程序處理。

Exception

RuntimeException

程序設(shè)計(jì)或?qū)崿F(xiàn)上的問題,如數(shù)組越界等。

其它通常是由環(huán)境因素引起的,并且可以被處理的。如文件不存在,無效URL等。Java中定義的異常

ArithmeticException0做除數(shù)。

NullPointerException

對象沒有實(shí)例化。ArrayIndexOutOfBoundsException

數(shù)組越界。

IOException

輸入/輸出異常。

SecurityException

安全控制異常。Java中定義的異常異常處理方法1、捕獲并處理異常2、將方法中產(chǎn)生的異常拋出Try語句塊一般形式:try{ Javastatements//一條或多條可能產(chǎn)生異常的java語句。

}try語句后必須跟隨至少一個(gè)catch或finally語句塊。Catch語句塊Catch語句塊提供錯(cuò)誤處理。一般格式:catch(SomeThrowableObject

variableName){Javastatements}?

SomeThrowableObject:能夠被處理的異常類名,必須是throwable類的子類?

variableName:是異常處理程序中能夠引用的代表被捕獲異常的變量名稱。?Javastatements:當(dāng)捕獲到異常時(shí)執(zhí)行的java語句。將先前方法的狀態(tài)清除,并可以將控制轉(zhuǎn)移到程序的其他地方。finally語句塊無論是否發(fā)生異常都要執(zhí)行。Finally語句塊try-catch語句

try-catch語句用來處理程序產(chǎn)生的異常try{//可能產(chǎn)生的異常代碼段}catch(Exception

ae){//捕獲異常,ae就是異常對象的引用

//異常處理}try語句用來啟動Java的異常處理機(jī)制,對其內(nèi)的程序代碼進(jìn)行檢查。如果try語句內(nèi)的代碼出現(xiàn)異常,catch語句負(fù)責(zé)捕獲,并在catch語句內(nèi)做適當(dāng)處理。publicclassExcep2{ publicstaticvoidmain(String[]args){

System.out.println("開始程序");

inta=1,b=0;

try{

intc=a/b;

System.out.println(c); }catch(ArithmeticException

ae){

System.out.println("不能被0除"); }

System.out.println("退出程序"); }}運(yùn)行結(jié)果:開始程序不能被0除!退出程序說明:1當(dāng)語句intc=a/b;出現(xiàn)異常時(shí),程序立即停止執(zhí)行try語句內(nèi)的剩余語句,轉(zhuǎn)而執(zhí)行catch語句。2ArithmeticException表示同數(shù)學(xué)相關(guān)的異常類publicclassExcep3{ voidhi(){

System.out.println("Hi~~"); } publicstaticvoidmain(String[]args){ Excep3ob=null; try{

ob.hi(); }catch(NullPointerException

ne){ ob=newExcep3(); }

ob.hi();//輸出

} }說明:NullPointerException是在通過對象變量來引用一個(gè)空對象時(shí)發(fā)生異常的異常類。運(yùn)行結(jié)果:Hi~~publicclassExample7_4{publicstaticvoidmain(String

args[]){

intn=0,m=0,t=1000;try{m=Integer.parseInt("8888");n=Integer.parseInt("ab89");//發(fā)生異常t=7777;

}

catch(NumberFormatExceptione){

System.out.println("發(fā)生異常:"+e.getMessage());}

System.out.println("n="+n+",m="+m+",t="+t);try{System.out.println("故意拋出I/O異常!");thrownewjava.io.IOException("我是故意的!");//System.out.println("沒有機(jī)會執(zhí)行!");}

catch(java.io.IOExceptione){

System.out.println("發(fā)生異常:"+e.getMessage());}}}publicclassExcep4{publicstaticvoidmain(String[]args){

int[]a=newint[5]; try{ a[10]=200; }catch(ArithemticExceptione){

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

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

System.out.println(e); }finally{

System.out.println(無條件執(zhí)行); } }}說明:1如果想同時(shí)處理多種異常,只需重復(fù)使用多個(gè)catch語句。2finally語句緊跟在try-catch語句之后,不論在try語句中是否發(fā)生了異常,finally語句總會被無條件的執(zhí)行。運(yùn)行結(jié)果:java.lang.ArrayIndexOutOfBoundsException無條件執(zhí)行可拋出異常的方法1當(dāng)在調(diào)用某個(gè)方法時(shí),可能會發(fā)生異常,我們把這樣的方法稱為可拋出異常的方法。2可拋出異常的方法實(shí)質(zhì)是指在該方法體內(nèi)存在可能產(chǎn)生異常對象的語句或可拋出異常的方法。publicclassExcep6{staticvoidgo()throwsNegativeArraySizeException{

int[]a=newint[-1];}publicstaticvoidmain(String[]args){ try{

go(); }catch(NegativeArraySizeExceptione){

System.out.println("go()方法拋出了異常"); }}}說明:1如果一個(gè)方法的頭部末尾存在“throws異常類名”的字符串,該方法就是一個(gè)可拋出異常的方法。2“throws異常類名”可以理解為將方法體中產(chǎn)生的異常對象拋出到該方法的調(diào)用處。運(yùn)行結(jié)果:go()方法拋出了異常publicclassExcep7{ staticvoidgo()throwsNegativeArraySizeException{

int[]a=newint[-1]; } staticvoidhi()throwsNegativeArraySizeException{

go(); } publicstaticvoidmain(String[]args){ try{ hi(); }catch(NegativeArraySizeExceptione){

System.out.println("捕獲來自遠(yuǎn)方的異常"); } }}說明:1如果必要,異常對象可以多次拋出,但最終必須被捕獲。異常類1用戶可以自己定義異常類,只須繼承Exception類即可;然后規(guī)定哪些方法產(chǎn)生這樣的異常。2如果用戶想拋出用戶自定義的異常類對象,應(yīng)使用”throw”關(guān)鍵字;3如果想拋出自定義異常對象,則一定要將所調(diào)用的方法定義為可拋出異常的方法。classMyExceptionextendsException{

MyException(String

ErrorMessage){

super(ErrorMessage); }}publicclassExcep11{ staticint

avg(int

a,intb)throwsMyException{

if(a<0||b<0)//op1為false時(shí)才計(jì)算op2

thrownewMyException("負(fù)值不可"); elseif(a>100||b>100)

thrownewMyException("數(shù)值過大"); return(a+b)/2;}publicstaticvoidmain(String[]args){ try{System.out.println(avg(-10,20));}catch(MyExceptione){

System.out.println(e);//}}}運(yùn)行結(jié)果:MyException:負(fù)值不可例如銀行應(yīng)用程序,一個(gè)整數(shù)代表收入,一個(gè)整數(shù)代表支出時(shí),這兩個(gè)整數(shù)不允許同號做求和運(yùn)算。Bank類中有一個(gè)income(int

in,intout)方法,對象調(diào)用該方法時(shí),必須向參數(shù)in傳遞正整數(shù)、向參數(shù)out傳遞負(fù)數(shù),并且int+out必須大于等于0,否則該方法就拋出異常(BankException.java

)。因此,Bank類在聲明income(int

in,intout)方法時(shí),使用throws關(guān)鍵字聲明要產(chǎn)生的異常。classBankExceptionextendsException{Stringmessage;publicBankException(int

m,intn){message="入賬資金"+m+"是負(fù)數(shù)或支出"+n+"是正數(shù),不符合系統(tǒng)要求.";}publicStringwarnMess(){returnmessage;}}classBank{privateintmoney;publicvoidincome(int

in,intout)throwsBankException{

if(in<=0||out>=0||in+out<=0){thrownewBankException(in,out);//方法拋出異常,導(dǎo)致方法結(jié)束

}

int

netIncome=in+out;

System.out.printf("本次計(jì)算出的純收入是:%d元\n",netIncome);money=money+netIncome;}publicint

getMoney(){returnmoney;}}publicclassExample7_5{publicstaticvoidmain(String

args[]){Bankbank=newBank();try{bank.income(200,-100);bank.income(300,-100);bank.income(400,-100);

Syste

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論