![第15章 異常處理_第1頁](http://file4.renrendoc.com/view/fe79d2077a4ff760630bc8ace946065e/fe79d2077a4ff760630bc8ace946065e1.gif)
![第15章 異常處理_第2頁](http://file4.renrendoc.com/view/fe79d2077a4ff760630bc8ace946065e/fe79d2077a4ff760630bc8ace946065e2.gif)
![第15章 異常處理_第3頁](http://file4.renrendoc.com/view/fe79d2077a4ff760630bc8ace946065e/fe79d2077a4ff760630bc8ace946065e3.gif)
![第15章 異常處理_第4頁](http://file4.renrendoc.com/view/fe79d2077a4ff760630bc8ace946065e/fe79d2077a4ff760630bc8ace946065e4.gif)
![第15章 異常處理_第5頁](http://file4.renrendoc.com/view/fe79d2077a4ff760630bc8ace946065e/fe79d2077a4ff760630bc8ace946065e5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
Java異常處理第十五章回顧數(shù)組的定義如何訪問數(shù)組元素如何實(shí)現(xiàn)數(shù)組的排序本章目標(biāo)理解異常的概念運(yùn)用try塊、catch塊和finally塊處理異常運(yùn)用多重catch塊處理異常運(yùn)用嵌套try/catch塊處理異常運(yùn)用關(guān)鍵字throw和throws處理異常什么是異常?程序中出現(xiàn)的錯誤被稱為異常;異常可分為兩大類:編譯時異常和運(yùn)行時異常;編譯時異常一般是指語法錯誤,可以通過編譯器的提示加以修正,這里我們不予討論;運(yùn)行時異常包括:運(yùn)行錯誤:如數(shù)組下標(biāo)越界,除數(shù)為0等;邏輯錯誤:如年齡超過200歲等。產(chǎn)生異常的原因產(chǎn)生異常的原因多種多樣,大致有:系統(tǒng)資源不可用:如內(nèi)存分配失敗,文件打開失敗,數(shù)據(jù)源連接失敗等等;程序控制不當(dāng):如被零除,負(fù)數(shù)開方,數(shù)組下標(biāo)越界等等。產(chǎn)生異常后的反應(yīng)當(dāng)異常發(fā)生時,程序一般會作出如下反應(yīng):發(fā)生異常的部分產(chǎn)生系統(tǒng)定義的錯誤信息;程序意外終止,并將控制權(quán)返回操作系統(tǒng);程序中所有已分配資源的狀態(tài)保持不變,這樣將會導(dǎo)致資源泄漏。那么我們就必須對有可能產(chǎn)生的異常進(jìn)行處理。產(chǎn)生異常后的反應(yīng)(示例)public
classExceptionDemo{
public
static
voidmain(String[]args){
inta=10,b=0,c;
//這里的除數(shù)為0,將會產(chǎn)生異常
c=a/b;System.out.println(c);}}try塊和catch塊try塊:一般用來監(jiān)視有可能產(chǎn)生異常的代碼部分;catch塊:當(dāng)異常產(chǎn)生后,catch塊捕捉異常,并在其中對異常進(jìn)行處理。try/catch塊的一般形式……try{……//監(jiān)視有可能發(fā)生異常的代碼段}catch(異常類型){ //捕獲發(fā)生的異常
……//對異常進(jìn)行處理}……Java中的異常類異常說明Exception異常層次結(jié)構(gòu)的根類ArithmeticException算術(shù)異常,如:除數(shù)為0ArrayIndexOutOfBoundsException數(shù)組下標(biāo)越界NullPointerException訪問空引用ClassNotFoundException不能加載所需的類NumberFormatException字符串轉(zhuǎn)換數(shù)字失敗IOExceptionI/O異常的根類try/catch塊示例public
classExceptionDemo{
public
static
voidmain(String[]args){
inta=10,b=0,c;
try{//監(jiān)視有可能出現(xiàn)異常的代碼段
c=a/b;System.out.println(c);}
catch(ArithmeticExceptionae){//如果出現(xiàn)異常,將被捕獲
System.out.println("除數(shù)為0。");}System.out.println("程序結(jié)束。");}}finally塊無論try/catch塊中發(fā)生了什么,finally塊都一定會執(zhí)行;當(dāng)異常發(fā)生時,程序可能會意外中斷,有些被占用的資源就得不到清理。finally塊可以確保執(zhí)行所有的清理工作;無論是否發(fā)生異常,finally塊都將執(zhí)行;finally塊是可選的,可視具體情況決定是否添加;
finally塊必須和try塊一起使用,不能單獨(dú)存在。try/catch/finally塊示例public
classExceptionDemo{
public
static
voidmain(String[]args){
inta=10,b=0,c;
try{c=a/b;System.out.println(c);}
catch(ArithmeticExceptionae)
{System.out.println("除數(shù)為0。");}
//不論是否發(fā)生異常,finally塊中的語句都會執(zhí)行
finally{System.out.println("finally塊中的語句。");}
System.out.println("程序結(jié)束。");}}try/catch/finally執(zhí)行流程try塊finally塊catch塊
無異常發(fā)生異常try/catch/finally應(yīng)用模型Try{……//連接到數(shù)據(jù)庫的代碼,有可能發(fā)生異常
……//對數(shù)據(jù)庫進(jìn)行操作的代碼,有可能發(fā)生異常}catch(SQLExceptionsqle){//捕獲數(shù)據(jù)庫異常
……//對捕獲的異常進(jìn)行處理}finally{……//在finally塊中執(zhí)行關(guān)閉數(shù)據(jù)庫的操作}異常類中的常用方法方法原型說明StringgetMessage()在Exception類中定義的方法,被繼承到所有的異常類中,用于獲得與異常相關(guān)的描述信息。voidprintStackTrace()在Exception類中定義的方法,用于在控制臺上顯示有關(guān)異常的信息,不但有異常的原因,還涉及產(chǎn)生異常的代碼行。多重catch塊有時候,在try塊中的代碼段將有可能產(chǎn)生多種不同類型的異常,而我們又需要針對不同的異常類型進(jìn)行不同的處理方式,那么我們就可以使用多重catch塊,來分別捕獲不同類型的異常。多重catch塊示例public
classExceptionDemo{
public
static
voidmain(String[]args){
inta,b,c;
try{
//從命令行參數(shù)獲得用戶輸入的數(shù)字
a=Integer.parseInt(args[0]);b=Integer.parseInt(args[1]);c=a/b;System.out.println(c);}
catch(ArrayIndexOutOfBoundsExceptionaioobe){//捕捉數(shù)組下標(biāo)越界異常
System.out.println("您沒有指定命令行參數(shù)。");}
catch(NumberFormatExceptionnfe){//捕捉字符串到數(shù)字轉(zhuǎn)換異常
System.out.println("您輸入的不是數(shù)字。");}
catch(ArithmeticExceptionae)
{//捕捉算術(shù)(除數(shù)為0)異常
System.out.println("除數(shù)為0。");}
catch(Exceptione){//捕捉其它不可預(yù)測的異常
System.out.println(e.getMessage());}System.out.println("程序結(jié)束。");}}多重catch塊的注意事項(xiàng)雖然多重catch塊可以同時監(jiān)視多個不同類型的異常,但是try塊中一旦有某個異常產(chǎn)生,程序就會跳轉(zhuǎn)到與之異常類型最匹配的catch塊中執(zhí)行,然后執(zhí)行finally塊(如果有finally塊的話)或之后的語句;也就是說,多重catch塊只會捕捉到最先產(chǎn)生的異常,而不是把所有的異常全部捕捉完;即:不論有多少個catch塊,最多只會執(zhí)行其中的一個;請注意catch塊的書寫順序:類層次越低的越往上寫,越高的越往下寫。多重catch塊書寫順序示例public
classExceptionDemo{
public
static
voidmain(String[]args){
inta,b,c;
try{a=Integer.parseInt(args[0]);b=Integer.parseInt(args[1]);c=a/b;System.out.println(c);}
//由于Exception類的層次最高,以下的所有異常類型都是其子類,這樣寫將會報錯
catch(Exceptione){//捕捉其它不可預(yù)測的異常
System.out.println(e.getMessage());}
catch(ArrayIndexOutOfBoundsExceptionaioobe){//捕捉數(shù)組下標(biāo)越界異常
System.out.println("您沒有指定命令行參數(shù)。");}
catch(NumberFormatExceptionnfe){//捕捉字符串到數(shù)字轉(zhuǎn)換異常
System.out.println("您輸入的不是數(shù)字。");}
catch(ArithmeticExceptionae)
{//捕捉算術(shù)(除數(shù)為0)異常
System.out.println("除數(shù)為0。");}System.out.println("程序結(jié)束。");}}嵌套try/catch塊有時候,整個語句塊可以產(chǎn)生異常,而其中的某個部分又可能產(chǎn)生另外的異常,而我們需要分別進(jìn)行處理;這樣,就可以通過嵌套try/catch塊來完成;嵌套try/catch塊就是在一個try/catch塊中包含有另外的try/catch塊。嵌套try/catch塊示例public
classExceptionDemo{
public
static
voidmain(String[]args){
/*外層try/catch塊*/
try{System.out.println("傳遞的參數(shù)是:"+args[0]);
/*嵌套try/catch塊*/
try{
intnum=Integer.parseInt(args[0]);
System.out.println(num+"的平方是"+ (num*num));}
catch(NumberFormatExceptionnfe){System.out.println("您輸入的不是數(shù)字。");}}
catch(ArrayIndexOutOfBoundsExceptionaioobe){System.out.println("您沒有輸入命令行參數(shù)。");}}}throw關(guān)鍵字throw語句用于手工拋出異常;執(zhí)行流程將在throw語句后立即停止,轉(zhuǎn)而尋找與之類型相匹配的catch塊;throw語句的語法是:
throw(異常類型的實(shí)例);throw語句示例public
classThrowDemo{
public
static
voidmain(String[]args){
try{
intage=Integer.parseInt(args[0]);
if(age<0||age>100){
//創(chuàng)建一個異常實(shí)例,并將其手工拋出
throw(newException("您輸入的年齡無效。"));}System.out.println("您的年齡是:"+age+"歲。");}
catch(Exceptione){//捕捉異常
//打印出異常信息
System.out.println(e.getMessage());}}}throws關(guān)鍵字如果某個函數(shù)中的代碼有可能引發(fā)異常,可以使用try/catch塊進(jìn)行處理,這種處理方式成為“內(nèi)部處理”;如果不方便在函數(shù)內(nèi)部進(jìn)行處理,也可以將異常往函數(shù)外部傳遞,這就要使用到關(guān)鍵字throws;throws用于將函數(shù)內(nèi)部產(chǎn)生的異常拋給主調(diào)函數(shù);一般語法:
返回值類型函數(shù)名(參數(shù)列表)throws
異常類型{ ……}throws關(guān)鍵字示例publicclassStudent{//定義學(xué)生類
privateStringmName;//姓名
private
intmAge;//年齡
……//其它方法,代碼略
/*為姓名賦值的方法*/
public
voidsetName(Stringname){mName=name;}
/*為年齡賦值的方法,該方法有可能拋出異常*/
public
voidsetAge(intage)throwsAgeException{
if(age<0||age>100){
throw(newAgeException());}mAge=age;}……//其它方法,代碼略}調(diào)用帶有throws的函數(shù)1當(dāng)調(diào)用帶有throws關(guān)鍵字的函數(shù)時,則必須放在try/catch塊中進(jìn)行監(jiān)控,否則編譯器將會報錯;public
classThrowsTest{
public
static
voidmain(String[]args){Studentstd=newStudent();
tr
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2025年中國三元乙丙防水涂料行業(yè)發(fā)展?jié)摿Ψ治黾巴顿Y方向研究報告
- 2025年異形硅橡膠按鍵項(xiàng)目投資可行性研究分析報告
- 2023-2029年中國低度果酒行業(yè)市場發(fā)展監(jiān)測及投資戰(zhàn)略咨詢報告
- 2025年度攪拌車環(huán)保排放達(dá)標(biāo)檢測合同
- 農(nóng)村墓地合同范本
- 兄弟借款合同范例
- 商鋪?zhàn)赓U轉(zhuǎn)讓合同范本
- 中介墊資合同范例
- 不簽訂招標(biāo)合同范例
- 砂、碎石供貨合同范本
- 2024年臨床醫(yī)師定期考核試題中醫(yī)知識題庫及答案(共330題) (二)
- 2025-2030年中國反滲透膜行業(yè)市場發(fā)展趨勢展望與投資策略分析報告
- 湖北省十堰市城區(qū)2024-2025學(xué)年九年級上學(xué)期期末質(zhì)量檢測道德與法治試題 (含答案)
- 2025年山東省濟(jì)寧高新區(qū)管委會“優(yōu)才”招聘20人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025年中國社會科學(xué)評價研究院第一批專業(yè)技術(shù)人員招聘2人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- (2024年高考真題)2024年普通高等學(xué)校招生全國統(tǒng)一考試數(shù)學(xué)試卷-新課標(biāo)Ⅰ卷(含部分解析)
- HCIA-AI H13-311 v3.5認(rèn)證考試題庫(含答案)
- 市場調(diào)查 第三版 課件全套 夏學(xué)文 單元1-8 市場調(diào)查認(rèn)知 - 市場調(diào)查報告的撰寫與評估
- 初中化學(xué)跨學(xué)科實(shí)踐活動:海洋資源的綜合利用與制鹽課件 2024-2025學(xué)年九年級化學(xué)科粵版(2024)下冊
- 內(nèi)蒙自治區(qū)烏蘭察布市集寧二中2025屆高考語文全真模擬密押卷含解析
- 《住院患者身體約束的護(hù)理》團(tuán)體標(biāo)準(zhǔn)解讀課件
評論
0/150
提交評論