版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度文化創(chuàng)意產(chǎn)品采購合同變更及版權(quán)協(xié)議3篇
- 二零二五版美團(tuán)騎手薪酬福利及晉升體系合同2篇
- 課題申報(bào)參考:南嶺走廊儺戲服飾文化基因解碼及傳承路徑研究
- 課題申報(bào)參考:慢波睡眠期間無意識序列學(xué)習(xí)的神經(jīng)機(jī)制及認(rèn)知調(diào)控
- 2025年度虛擬現(xiàn)實(shí)游戲開發(fā)與授權(quán)合同范本4篇
- 2025年度個(gè)人旅游居間代理合同樣本2篇
- 南京市2025年度二手房購房合同(含環(huán)保檢測報(bào)告)4篇
- 2025年度個(gè)人租賃城市中心公寓及家電配置合同3篇
- 2025版南寧高新區(qū)廠房租賃合同及技術(shù)支持服務(wù)協(xié)議4篇
- 2025年度個(gè)人小額信用貸款合同范本7篇
- 綠化養(yǎng)護(hù)難點(diǎn)要點(diǎn)分析及技術(shù)措施
- 2024年河北省高考?xì)v史試卷(含答案解析)
- 車位款抵扣工程款合同
- 2023年湖北省襄陽市中考數(shù)學(xué)真題(原卷版)
- 小學(xué)六年級數(shù)學(xué)奧數(shù)題100題附答案(完整版)
- 湖南高速鐵路職業(yè)技術(shù)學(xué)院單招職業(yè)技能測試參考試題庫(含答案)
- 英漢互譯單詞練習(xí)打印紙
- 2023湖北武漢華中科技大學(xué)招聘實(shí)驗(yàn)技術(shù)人員24人筆試參考題庫(共500題)答案詳解版
- 一氯二氟甲烷安全技術(shù)說明書MSDS
- 母嬰護(hù)理員題庫
- SWITCH暗黑破壞神3超級金手指修改 版本號:2.7.6.90885
評論
0/150
提交評論