Java程序設(shè)計(jì)任務(wù)驅(qū)動(dòng)式教程 任務(wù)十三 防患于未然捕獲并處理異常PPT課件_第1頁(yè)
Java程序設(shè)計(jì)任務(wù)驅(qū)動(dòng)式教程 任務(wù)十三 防患于未然捕獲并處理異常PPT課件_第2頁(yè)
Java程序設(shè)計(jì)任務(wù)驅(qū)動(dòng)式教程 任務(wù)十三 防患于未然捕獲并處理異常PPT課件_第3頁(yè)
Java程序設(shè)計(jì)任務(wù)驅(qū)動(dòng)式教程 任務(wù)十三 防患于未然捕獲并處理異常PPT課件_第4頁(yè)
Java程序設(shè)計(jì)任務(wù)驅(qū)動(dòng)式教程 任務(wù)十三 防患于未然捕獲并處理異常PPT課件_第5頁(yè)
已閱讀5頁(yè),還剩24頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、129目錄任務(wù)一 搭建環(huán)境(構(gòu)建Java集成開(kāi)發(fā)環(huán)境)任務(wù)二 Java歡迎你(開(kāi)發(fā)簡(jiǎn)單Java應(yīng)用程序任務(wù)三 小試牛刀(學(xué)習(xí)Java語(yǔ)言基礎(chǔ))任務(wù)四 挑戰(zhàn)選擇(使用分支控制流程)任務(wù)五 游戲人生(使用循環(huán)控制流程)任務(wù)六 回歸自然(創(chuàng)建、使用類和對(duì)象)任務(wù)七 3G時(shí)代的消息傳遞(定義和使用類方法)任務(wù)八 保護(hù)你的隱私(封裝的使用)任務(wù)九 子承父業(yè)(繼承和多態(tài)的使用)任務(wù)十 上帝萬(wàn)能之手(接口的使用)第1頁(yè)/共29頁(yè)229任務(wù)十一 用數(shù)組存儲(chǔ)信息(使用數(shù)組)任務(wù)十二 使用字符串進(jìn)行交流(使用字符串)任務(wù)十三 防患于未然(捕獲并處理異常)任務(wù)十四 主動(dòng)出擊(拋出異常)任務(wù)十五 認(rèn)識(shí)Java App

2、let(Applet入門)任務(wù)十六 豐富多彩的Applet(在Applet中播放聲音和顯示圖像)任務(wù)十七 進(jìn)入Windows世界(設(shè)計(jì)圖形用戶界面)任務(wù)十八 布局規(guī)劃(使用布局管理器)任務(wù)十九 事件委托處理(如何處理事件)任務(wù)二十 選擇之道(使用選擇控件和選擇事件)目錄第2頁(yè)/共29頁(yè)329任務(wù)二十一 簡(jiǎn)明清晰的菜單(使用菜單和其他常用事件)任務(wù)二十二 訪問(wèn)數(shù)據(jù)(使用JDBC連接數(shù)據(jù)庫(kù))任務(wù)二十三 訪問(wèn)數(shù)據(jù)升級(jí)(數(shù)據(jù)庫(kù)編程)任務(wù)二十四 文件管理(目錄與文件管理)任務(wù)二十五 順序進(jìn)出之道(文件的順序訪問(wèn))任務(wù)二十六 隨機(jī)進(jìn)出之道(文件的隨機(jī)訪問(wèn))任務(wù)二十七 JAVA的分身術(shù)(創(chuàng)建和啟動(dòng)線程)任務(wù)

3、二十八 線程的生命周期與優(yōu)先級(jí)(線程的狀態(tài)與調(diào)度)任務(wù)二十九 基于連接的通信(Java中的套接字Socket)任務(wù)三十 基于無(wú)連接的通信(Java中的數(shù)據(jù)報(bào)編程)目錄第3頁(yè)/共29頁(yè)429任務(wù)十三 防患于未然(捕獲并處理異常) 21知識(shí)目標(biāo)知識(shí)目標(biāo)能力目標(biāo)能力目標(biāo)什么是異常;如何進(jìn)行異常處理;異常處理的關(guān)鍵字;異常處理結(jié)構(gòu)。 掌握J(rèn)ava的異常處理機(jī)制;運(yùn)用 try、catch、finally 處理異常。 第4頁(yè)/共29頁(yè)529內(nèi)容提要4跟我做:跟我做:捕獲并處理異常捕獲并處理異常 1235實(shí)現(xiàn)方案實(shí)現(xiàn)方案 代碼分析代碼分析 必備知識(shí)必備知識(shí) 動(dòng)手做一做動(dòng)手做一做 第5頁(yè)/共29頁(yè)62913.

4、1 跟我做:捕獲并處理異常 n任務(wù)情景編寫除法計(jì)算器程序。當(dāng)除數(shù)為零時(shí),產(chǎn)生異常。當(dāng)輸入除數(shù)、被除數(shù)其中有一個(gè)不是數(shù)字時(shí),也產(chǎn)生異常。當(dāng)調(diào)用存放在數(shù)組中的計(jì)算結(jié)果,數(shù)組索引越界,也產(chǎn)生異常。n運(yùn)行結(jié)果第1章目錄第6頁(yè)/共29頁(yè)72913.2 實(shí)現(xiàn)方案 n問(wèn)題分析從鍵盤輸入一個(gè)整型數(shù)字可以使用java.util.Scanner的nextInt ()方法。Scanner in = new Scanner(System.in);int i = in.nextInt();但在程序運(yùn)行時(shí),會(huì)產(chǎn)生很多意想不到的輸入問(wèn)題,如輸入數(shù)中出現(xiàn)了字母、特殊符號(hào)等,程序無(wú)法正確運(yùn)行下去。本任務(wù)采用異常捕獲和處理技術(shù)保

5、證程序的健壯性。第1章目錄第7頁(yè)/共29頁(yè)82913.2 實(shí)現(xiàn)方案 n解決步驟1.打開(kāi)Eclipse,在study項(xiàng)目中創(chuàng)建包c(diǎn)om.task13,再確定類名CalculateException,得到類的框架。package com. task13;public class CalculateException/* * param args */public static void main(String args) / TODO Auto-generated method stub2.將/ TODO Auto-generated method stub替換成:int result=0,1,2

6、;int operand1=0;int operand2=0;3.接著輸入代碼:Scanner in = new Scanner(System.in);try /詳細(xì)實(shí)現(xiàn)代碼參見(jiàn)13.3 catch (InputMismatchException ie) /詳細(xì)實(shí)現(xiàn)代碼參見(jiàn)13.3 4.導(dǎo)入java.util.Scanner和java.util.InputMismatchException后,運(yùn)行程序。第1章目錄第8頁(yè)/共29頁(yè)929n程序代碼package com.task13;import java.util.InputMismatchException;import java.util.

7、Scanner;/* * CalculateException.java * 實(shí)現(xiàn)try/catch */public class CalculateException /* * param args */public static void main(String args) int result=0,1,2;int operand1=0;int operand2=0;Scanner in = new Scanner(System.in);trySystem.out.print(請(qǐng)輸入除數(shù):);operand1 = in.nextInt(); System.out.print(請(qǐng)輸入被除數(shù):

8、);operand2 = in.nextInt(); result2=operand2/operand1;System.out.println(計(jì)算結(jié)果:+result3); catch (InputMismatchException ie) System.out.println(異常:輸入不為數(shù)字!); catch (ArithmeticException ae) System.out.println(異常:除數(shù)不能為零!); catch (ArrayIndexOutOfBoundsException aie) System.out.println(異常:數(shù)組索引越界!);catch (Ex

9、ception e) System.out.println(其他異常:+e.getMessage();第1章目錄13.3 代碼分析 第9頁(yè)/共29頁(yè)1029n 應(yīng)用擴(kuò)展 如果在程序運(yùn)行后,要求無(wú)論產(chǎn)生異常,還是不產(chǎn)生異常,都要顯示“歡迎使用計(jì)算機(jī)器”,則需要在 try catch 后,增加finally。增加的代碼為: finallySystem.out.println(歡迎使用計(jì)算機(jī)器!); 13.3 代碼分析 第10頁(yè)/共29頁(yè)112913.4 必備知識(shí) 13.4.1 異常的概念在Java程序編寫中,通過(guò)編譯,能夠發(fā)現(xiàn)很多錯(cuò)誤,但有些問(wèn)題只能在程序運(yùn)行的時(shí)候才能發(fā)現(xiàn)。一旦問(wèn)題出現(xiàn),程序?qū)⒔K

10、止,返回到操作系統(tǒng)。異常就是在程序的運(yùn)行過(guò)程中所發(fā)生的不正常的事件,它會(huì)中斷正在運(yùn)行的程序。例如,除數(shù)為零、數(shù)組下標(biāo)越界、需要的文件找不到等,程序都會(huì)出現(xiàn)異常。例如,當(dāng)給int類型變量b賦值0后,執(zhí)行到c=a/b;語(yǔ)句時(shí),就會(huì)出現(xiàn)異常,因?yàn)閿?shù)學(xué)中規(guī)定除數(shù)為能為零。異常信息如圖13-2。第1章目錄第11頁(yè)/共29頁(yè)122913.4 必備知識(shí) 圖中的異常信息表示,產(chǎn)生了“java.lang.ArithmeticException”算術(shù)異常。產(chǎn)生異常的語(yǔ)句,在包“com.task13”中的“MyException”類中的“main()”方法的第15行,除數(shù)為零。出現(xiàn)了異常,會(huì)打亂原先的執(zhí)行順序,得不

11、到預(yù)期的運(yùn)行結(jié)果。所以,需要在程序中進(jìn)行異常處理。異常處理把程序功能代碼與異常處理代碼分開(kāi),集中處理異常,使得整個(gè)程序代碼更有條理,也減少了編程代碼。第1章目錄第12頁(yè)/共29頁(yè)132913.4.2 異常處理機(jī)制Java使用異常處理機(jī)制為程序提供了異常處理的能力。所謂異常處理,就是在程序中預(yù)先想好對(duì)異常的處理辦法,當(dāng)程序運(yùn)行出現(xiàn)異常時(shí),對(duì)異常進(jìn)行處理,處理完畢,程序繼續(xù)運(yùn)行。Java異常處理機(jī)制由捕獲異常和處理異常兩部分組成。當(dāng)出現(xiàn)了異常事件,就會(huì)生成一個(gè)異常對(duì)象,傳遞給運(yùn)行時(shí)系統(tǒng),這個(gè)產(chǎn)生和提交異常的過(guò)程稱為拋出(throw)異常。當(dāng)運(yùn)行時(shí)系統(tǒng)得到異常對(duì)象時(shí),將會(huì)尋找處理異常的方法,把當(dāng)前異

12、常對(duì)象交給該方法處理,這一過(guò)程稱為捕獲(catch)異常。如果沒(méi)有找到可以捕獲異常的方法,則運(yùn)行時(shí)系統(tǒng)將終止,程序退出運(yùn)行狀態(tài)。第1章目錄13.4 必備知識(shí) 第13頁(yè)/共29頁(yè)1429 13.4.3 異常的分類 Java中,異常由類來(lái)表示,異常類的父類是Throwable類。Throwable類有兩個(gè)直接子類Error類和Exception類。Error類表示程序運(yùn)行時(shí)較少發(fā)生的內(nèi)部系統(tǒng)錯(cuò)誤,程序員無(wú)法處理。Exception類表示程序運(yùn)行時(shí)程序本身和環(huán)境產(chǎn)生的異常,可以捕獲和處理。異常類繼承結(jié)構(gòu)如圖13-3。13.4 必備知識(shí) ThrowableObjectErrorExceptionSQL

13、ExceptionIOExceptionRuntimeException第14頁(yè)/共29頁(yè)1529 13.4.4 標(biāo)準(zhǔn)異常類 Exception類常用子類的繼承關(guān)系如表13-3。13.4 必備知識(shí) ThrowableObjectErrorExceptionSQLExceptionIOExceptionRuntimeException第15頁(yè)/共29頁(yè)1629 13.4.5 異常的捕獲與處理 Java的異常捕獲與處理是通過(guò)5個(gè)關(guān)鍵字來(lái)實(shí)現(xiàn)的:try、catch、 finally、throw、throws。 本任務(wù)的重點(diǎn)在學(xué)習(xí)try/catch/finally結(jié)構(gòu)上。 關(guān)鍵字try構(gòu)成的try語(yǔ)句

14、塊執(zhí)行可能產(chǎn)生異常的代碼; 關(guān)鍵字catch構(gòu)成的catch語(yǔ)句塊捕獲異常,然后,對(duì)異常進(jìn)行所需的處理; 關(guān)鍵字finally構(gòu)成的finally語(yǔ)句塊完成一些資源釋放、清理的工作,如關(guān)閉try程序塊中所有打開(kāi)的文件、斷開(kāi)網(wǎng)絡(luò)連接。 在異常處理中,經(jīng)常使用異常對(duì)象的方法。使用getMessage()方法返回保存在某個(gè)異常中的描述字符串,使用printStackTrace ()方法把調(diào)用堆棧的內(nèi)容打印出來(lái)。 關(guān)鍵字throw用于手動(dòng)拋出異常、throws用于聲明方法可能要拋出的各種異常,將在任務(wù)十四進(jìn)行學(xué)習(xí)。13.4 必備知識(shí) 第16頁(yè)/共29頁(yè)1729 1.異常處理的語(yǔ)句結(jié)構(gòu) try /try

15、語(yǔ)句塊,可能產(chǎn)生異常的代碼。 catch(異常類型 異常引用變量) /catch語(yǔ)句塊,處理異常的代碼。捕獲異常。 finally /finally語(yǔ)句塊,釋放資源的代碼。無(wú)論是否發(fā)生異常,代碼都會(huì)執(zhí)行。 在語(yǔ)句結(jié)構(gòu)中,try和catch部分是必須的,并且catch部分可以有多個(gè),finally語(yǔ)句塊是可選項(xiàng),可以沒(méi)有。13.4 必備知識(shí) 第17頁(yè)/共29頁(yè)1829 2. 異常處理的執(zhí)行流程try語(yǔ)句塊異常?catch語(yǔ)句塊finally語(yǔ)句塊有異常無(wú)異常異常處理的執(zhí)行流程如圖13-3。try語(yǔ)句塊異常?catch語(yǔ)句塊finally語(yǔ)句塊有異常無(wú)異常13.4 必備知識(shí) 第18頁(yè)/共29頁(yè)19

16、29 從異常處理的執(zhí)行流程圖中,可以看出,當(dāng)try語(yǔ)句塊引發(fā)異常時(shí),將會(huì)拋出異常對(duì)象,然后,在catch語(yǔ)句塊中捕獲異常對(duì)象,進(jìn)行異常處理。如果無(wú)法捕獲拋出的異常對(duì)象,則會(huì)發(fā)生錯(cuò)誤,程序停止運(yùn)行。 如果try語(yǔ)句塊沒(méi)有引發(fā)異常,catch語(yǔ)句塊將不執(zhí)行。但是,無(wú)論有沒(méi)有異常拋出,finally語(yǔ)句塊總是被執(zhí)行。 注意:catch語(yǔ)句塊中的異常處理代碼中,不能訪問(wèn)由try語(yǔ)句塊定義的對(duì)象,這是因?yàn)閠ry語(yǔ)句塊在異常處理代碼開(kāi)始執(zhí)行之前已過(guò)期。13.4 必備知識(shí) 第19頁(yè)/共29頁(yè)2029 3. try/catch結(jié)構(gòu)捕獲異常 try/catch結(jié)構(gòu)是異常處理中最簡(jiǎn)潔、最核心的語(yǔ)句塊,能夠捕獲異常

17、,并進(jìn)行必要的處理。關(guān)鍵字try和catch都不能省略。 例如,在新生入學(xué)時(shí)使用的迎新系統(tǒng)中,輸入新生的家庭電話號(hào)碼。號(hào)碼只能是數(shù)字組成,如果輸入非數(shù)字,則產(chǎn)生異常。代碼如下: package com.task13; import java.util.Scanner; /* * TryCatchException.java * 實(shí)現(xiàn)try/catch */ public class TryCatchException /* * param args */public static void main(String args) Scanner in = new Scanner(System.in

18、);System.out.println(=迎新系統(tǒng)=);System.out.println(3 新生報(bào)到);13.4 必備知識(shí) 第20頁(yè)/共29頁(yè)2129 try /try語(yǔ)句塊,可能產(chǎn)生異常的代碼System.out.println(請(qǐng)輸入新生的家庭電話號(hào)碼:);System.out.println(如,區(qū)號(hào)0523+號(hào)碼81234567,輸入052381234567);String telephone=in.nextLine(); /檢測(cè)輸入的電話號(hào)碼是否全為數(shù)字,不全為數(shù)字,產(chǎn)生異常int tel=Integer.parseInt(telephone);System.out.prin

19、tln(新生的家庭電話號(hào)碼:+tel); catch (NumberFormatException nex) /捕獲異常/catch語(yǔ)句塊對(duì)異常進(jìn)行處理 System.out.println(產(chǎn)生異常,電話號(hào)碼應(yīng)為數(shù)字!); /System.out.println(nex.toString(); /返回異常對(duì)象的類名,以及異常對(duì)象的信息nex.printStackTrace(); /堆棧跟蹤功能顯示出程序運(yùn)行到當(dāng)前類的執(zhí)行流程 13.4 必備知識(shí) 第21頁(yè)/共29頁(yè)2229 4.多重catch捕獲異常 多重catch就是在try/catch結(jié)構(gòu)中,出現(xiàn)一個(gè)try語(yǔ)句塊,多個(gè)catch語(yǔ)句塊的情

20、況,每個(gè)catch語(yǔ)句塊捕獲一種異常類的對(duì)象。如果捕獲的異常類之間沒(méi)有父子關(guān)系,各類的catch語(yǔ)句塊順序無(wú)關(guān)緊要,但是,如果它們之間有父子關(guān)系,則必須將子類的catch語(yǔ)句塊放在父類的catch語(yǔ)句塊之前。 例如,ArithmeticException算術(shù)異常類與NullPointerException空指針異常類之間不存在父子關(guān)系,捕獲異常時(shí),它們的catch語(yǔ)句塊順序可以不加考慮。 try /try語(yǔ)句塊,可能產(chǎn)生異常的代碼。 catch(ArithmeticException ae) /位置可以與NullPointerException 類對(duì)調(diào) /catch語(yǔ)句塊,處理異常的代碼。捕獲

21、異常。 catch(NullPointerException ne)/位置可以與ArithmeticException 類對(duì)調(diào) /catch語(yǔ)句塊,處理異常的代碼。捕獲異常。 13.4 必備知識(shí) 第22頁(yè)/共29頁(yè)2329 但是,Exception是異常根類,ArrayIndexOutOfBoundsException是數(shù)組索引越界異常類,它們之間存在父子關(guān)系,所以,Exception父類catch語(yǔ)句塊只能放在后面。 try /try語(yǔ)句塊,可能產(chǎn)生異常的代碼。 catch(ArrayIndexOutOfBoundsException ae)/位置必須在Exception之前 /catch語(yǔ)

22、句塊,處理異常的代碼。捕獲異常。 catch(Exception e)/位置只能在ArrayIndexOutOfBoundsException之后 /catch語(yǔ)句塊,處理異常的代碼。捕獲異常。 13.4 必備知識(shí) 第23頁(yè)/共29頁(yè)2429 多重catch捕獲異常舉例。從鍵盤輸入除數(shù)和被除數(shù),計(jì)算結(jié)果。當(dāng)輸入的數(shù)不為數(shù)字時(shí),產(chǎn)生NumberFormatException異常。當(dāng)除數(shù)為零時(shí),產(chǎn)生ArithmeticException算術(shù)異常,此時(shí)結(jié)果分為正無(wú)窮、零、負(fù)無(wú)窮三種情況。出現(xiàn)其他的異常,則顯示無(wú)法處理。代碼如下。 package com.task13; import java.uti

23、l.Scanner; /* * TryCatchsException.java * 實(shí)現(xiàn)多重catch */ public class TryCatchsException /* * param args */public static void main(String args) int operand1=0;/除數(shù)int operand2=0;/被除數(shù)Scanner in = new Scanner(System.in);13.4 必備知識(shí) 第24頁(yè)/共29頁(yè)2529try System.out.println(請(qǐng)輸入除數(shù):);operand1=Integer.parseInt(in.ne

24、xtLine();System.out.println(請(qǐng)輸入被除數(shù):);operand2=Integer.parseInt(in.nextLine();System.out.println(運(yùn)算結(jié)果:+operand2/operand1);catch (NumberFormatException nex) /捕獲字符串轉(zhuǎn)數(shù)字異常 System.out.println(捕獲異常:輸入不為數(shù)字!);catch (ArithmeticException aex) /捕獲算術(shù)異常,除數(shù)為零if (operand20)System.out.println(運(yùn)算結(jié)果:正無(wú)窮);else if (oper

25、and20)System.out.println(運(yùn)算結(jié)果:負(fù)無(wú)窮);elseSystem.out.println(運(yùn)算結(jié)果:零);catch (Exception ex) System.out.println(出現(xiàn)無(wú)法處理的異常!); 13.4 必備知識(shí) 第25頁(yè)/共29頁(yè)2629 5. try/catch/finally結(jié)構(gòu)捕獲異常 try/catch/finally結(jié)構(gòu)帶有關(guān)鍵字finally。finally語(yǔ)句塊用來(lái)進(jìn)行善后處理工作。例如,打開(kāi)數(shù)據(jù)庫(kù),從數(shù)據(jù)庫(kù)讀取相應(yīng)的數(shù)據(jù),當(dāng)讀取完成后,最后要關(guān)閉數(shù)據(jù)庫(kù)連接。沒(méi)有讀取成功,也要關(guān)閉數(shù)據(jù)庫(kù)連接。 package com.task13; import java.util.Scanner; /* * TryCatchFin

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論