java應(yīng)用基礎(chǔ)  第五章 異常處理[優(yōu)質(zhì)文檔]_第1頁
java應(yīng)用基礎(chǔ)  第五章 異常處理[優(yōu)質(zhì)文檔]_第2頁
java應(yīng)用基礎(chǔ)  第五章 異常處理[優(yōu)質(zhì)文檔]_第3頁
java應(yīng)用基礎(chǔ)  第五章 異常處理[優(yōu)質(zhì)文檔]_第4頁
java應(yīng)用基礎(chǔ)  第五章 異常處理[優(yōu)質(zhì)文檔]_第5頁
已閱讀5頁,還剩28頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第 6章 異常處理傀吠蔽召販野餌仰賢葡凸獵宰孫赴昭詹抹度趟爸岸釁保臘帳螢萎棲撲烯竣JAVA應(yīng)用基礎(chǔ)第五章異常處理JAVA應(yīng)用基礎(chǔ)第五章異常處理下一頁上一頁返回開始java中的異常處理 2主要內(nèi)容n Case:TryCatchDemo.javan 6.1 異常處理概述n 什么是異常n 為何采用異常處理n 6.2 異常的分類與層次n 6.3 異常的處理機(jī)制n 對(duì)異常處理的進(jìn)一步討論n 作業(yè)劑裹羚文維帽鉤脫胚瀝瓜娠聊難腋述丁仗錠寢勒髓親月鷹袁拭享唐膿狗難JAVA應(yīng)用基礎(chǔ)第五章異常處理JAVA應(yīng)用基礎(chǔ)第五章異常處理下一頁上一頁返回開始java中的異常處理 36.1 異常處理概述n 6.1.1 什么是異常n 異常就是在程序的運(yùn)行過程中所發(fā)生的意外事件,它中斷指令的正常執(zhí)行。n Java中提供了一種獨(dú)特的處理異常的機(jī)制,通過異常來處理程序設(shè)計(jì)中出現(xiàn)的錯(cuò)誤。n 異常 錯(cuò)誤倫岸夯教抽柔序柜爐軟莢軌脯烷判臘悲饑輕馳燙瀕酮嘴奪醛肉扶醬隘拋宰JAVA應(yīng)用基礎(chǔ)第五章異常處理JAVA應(yīng)用基礎(chǔ)第五章異常處理下一頁上一頁返回開始java中的異常處理 46.1 異常處理概述n 認(rèn)識(shí) Java中的錯(cuò)誤n 語法錯(cuò)誤n 運(yùn)行錯(cuò)誤n 邏輯錯(cuò)誤舅賒頻魂病瘩穆鉑吊銳鑰爬制四所超潘嘔呂圾理臂橇魁掉敗支摔越稅捧船JAVA應(yīng)用基礎(chǔ)第五章異常處理JAVA應(yīng)用基礎(chǔ)第五章異常處理下一頁上一頁返回開始java中的異常處理 56.1 異常處理概述n 認(rèn)識(shí) Java中的錯(cuò)誤n 語法錯(cuò)誤: 由代碼結(jié)構(gòu)中的問題引起n 如:拼錯(cuò)關(guān)鍵字,丟掉標(biāo)點(diǎn)符號(hào)等。n public class ShowSyntexErrosn public static void main(String args)n n i=30;n System.out.print(i+4);n n 軋姬驗(yàn)孰揉倆圾哇鄒閨運(yùn)低蝸堪色啃迢藤笨睹狗凹韶妄僻惡士竿佯煥肯敵JAVA應(yīng)用基礎(chǔ)第五章異常處理JAVA應(yīng)用基礎(chǔ)第五章異常處理下一頁上一頁返回開始java中的異常處理 66.1 異常處理概述n 認(rèn)識(shí) Java中的錯(cuò)誤n 運(yùn)行錯(cuò)誤: 引起程序非正常中斷的錯(cuò)誤n 如:輸入錯(cuò)誤,除零等。n public class ShowRuntimeErrosn public static void main(String args)n n int i=1/0;n n 基科府青篷漆榴馴紋戎沼涯潭偽鱉租逞班噶吻孟柬窩炳艾渠又奇礎(chǔ)塔咳攝JAVA應(yīng)用基礎(chǔ)第五章異常處理JAVA應(yīng)用基礎(chǔ)第五章異常處理下一頁上一頁返回開始java中的異常處理 76.1 異常處理概述n 認(rèn)識(shí) Java中的錯(cuò)誤n 邏輯錯(cuò)誤: 程序沒有按照期望的要求執(zhí)行n 原因多種多樣。n public class ShowLogicErrosn public static void main(String args)n n int number1=3;n int number2=3;n number2+=number1+number2;n System.out.println(“number2 is ”+number2);n n 宇趨尋智紗呈涪炔瘋餓過巖蘸拼疏唉役爭(zhēng)宅娥蛋踞盧農(nóng)啃熊瑰邁爪種氰誤JAVA應(yīng)用基礎(chǔ)第五章異常處理JAVA應(yīng)用基礎(chǔ)第五章異常處理下一頁上一頁返回開始java中的異常處理 86.1 異常處理概述n 認(rèn)識(shí) Java中的錯(cuò)誤n 語法錯(cuò)誤 : 編譯器指出錯(cuò)誤的位置和原因n 運(yùn)行錯(cuò)誤 : JVM定位錯(cuò)誤n 邏輯錯(cuò)誤 : 調(diào)試筏秦赤駭壤唯砂差屯挾幟協(xié)叮燭底古牢蒙砒般烘蚌峙豁隘熏遮皂顧璃膛裕JAVA應(yīng)用基礎(chǔ)第五章異常處理JAVA應(yīng)用基礎(chǔ)第五章異常處理下一頁上一頁返回開始java中的異常處理 96.1.2 為何使用意外處理:n 把出錯(cuò)處理和正常代碼分開。比如有程序是處理文件,大家看流程,這個(gè)流程中充滿了錯(cuò)誤可能。n readFile n 打開文件;打不開咋辦?n 判斷大小 ; 大小判斷失敗怎么辦?(磁帶)n 分配內(nèi)存 ; 內(nèi)存不夠n 讀入內(nèi)存 ;文件讀不出來n 關(guān)掉文件 ; 文件關(guān)不掉。n 解決方法:寫大量的 if語句。襯十售豁蘆傭覺蛾委隱維嶺漆輔鳴膀旋胸汰的堯暑歪量晦頰坯狐鎮(zhèn)訖萊家JAVA應(yīng)用基礎(chǔ)第五章異常處理JAVA應(yīng)用基礎(chǔ)第五章異常處理下一頁上一頁返回開始java中的異常處理 10傳統(tǒng)的錯(cuò)誤檢測(cè)和糾正n errorCodeType readFile n initialize errorCode = 0;n 打開文件 ;n if (打開文件成功 ) 判斷文件長n if (文件長取到 ) 分配內(nèi)存 n if (分內(nèi)存成功 ) 讀入內(nèi)存n if (讀文件失敗 ) errorCode = -1; /讀文件判斷n n else errorCode = -2; /分配內(nèi)存失敗n else errorCode = -3; /取不到文件長n 關(guān)閉文件 ;n if (文件沒關(guān) n else errorCode = errorCode and -4; n else errorCode = -5; n return errorCode;n 儲(chǔ)濫持槽巴墊論摻貴橡傷緊甜署瓢謅態(tài)蹄駭逛氫紐弦木嗅陀撈贓搜史源拆JAVA應(yīng)用基礎(chǔ)第五章異常處理JAVA應(yīng)用基礎(chǔ)第五章異常處理下一頁上一頁返回開始java中的異常處理 11n 從上面的流程可看出真正有用的代碼不多,就五條而已,其它全部是判斷錯(cuò)誤用的,主要邏輯都被錯(cuò)誤處理代碼混得看不清了,程序可讀性差,出錯(cuò)返回信息量太少。n 在 Java中,處理這種情況的方法是利用異常處理,把出錯(cuò)處理和正常代碼分開, Java異常處理通過 5個(gè)關(guān)鍵字try,catch,finally,throw和 throws進(jìn)行管理。 奶崩月缺騷壺踴巢攪彬廊悍弗扮饋心攝爬帽渴持恿更紋撈幼恫聯(lián)鴿打今屋JAVA應(yīng)用基礎(chǔ)第五章異常處理JAVA應(yīng)用基礎(chǔ)第五章異常處理下一頁上一頁返回開始java中的異常處理 12Java的解決方式n readFile /結(jié)構(gòu)清楚,無需自己判斷,代碼量小。n try n 打開文件; n 判斷大小 ; n 分配內(nèi)存 ; n 讀入內(nèi)存 ; n 關(guān)掉文件 ; catch (文件打開失敗) n 處理代碼; n catch (大小取不到失敗 ) n 處理代碼 ;n catch (內(nèi)存分配失敗 ) n 處理代碼 ;n catch (讀取失敗 ) n 處理代碼 ;n catch (文件關(guān)閉失敗 ) n 處理代碼 ; 候懷丸稅召橡鑷備慧靳炊甘荷碘燦吹泄擦酥獸五燒控腔悟卿蓬扭署躍繩辭JAVA應(yīng)用基礎(chǔ)第五章異常處理JAVA應(yīng)用基礎(chǔ)第五章異常處理下一頁上一頁返回開始java中的異常處理 136.2 異常類的分類與層次n 6.2.1 異常類的層次結(jié)構(gòu)n 在 jdk中,每個(gè)包中都定義了異常類,而所有的異常類都直接或間接地繼承于java.lang.Throwable類。當(dāng) Java程序遇到不可預(yù)料的錯(cuò)誤時(shí),會(huì)實(shí)例化一個(gè)從 Throwable類繼承的對(duì)象。 n java中的異常類可分為兩大類:n Error: 錯(cuò)誤 Error類指的是系統(tǒng)錯(cuò)誤或運(yùn)行環(huán)境出現(xiàn)的錯(cuò)誤,這些錯(cuò)誤一般是很嚴(yán)重的錯(cuò)誤,即使捕捉到也無法處理,由 Java虛擬機(jī)生成并拋出,包括系統(tǒng)崩潰、動(dòng)態(tài)鏈接失敗、虛擬機(jī)錯(cuò)誤等,在 Java程序中不做處理。 n Exception: 異常 Exception類則是指一些可以被捕獲且可能恢復(fù)的異常情況,是一般程序中可預(yù)知的問題。對(duì)于異常可分為兩類:n (1) 運(yùn)行時(shí)異常:程序中可以不做處理,直接由運(yùn)行時(shí)系統(tǒng)來處理。n (2) 非運(yùn)行時(shí)異常:在程序中必須對(duì)其進(jìn)行處理,否則編譯器會(huì)指出錯(cuò)誤。 米憊厭沏粥賭寢冊(cè)瘍粘張它亭祟衫遍傻岔爬璃惑婉石窿戲瑪蟬蘆鴛澎足草JAVA應(yīng)用基礎(chǔ)第五章異常處理JAVA應(yīng)用基礎(chǔ)第五章異常處理下一頁上一頁返回開始java中的異常處理 14異常類的結(jié)構(gòu)層次 善文欠笛莉鴛深甲氫鼻腋體晰暈熊吃歇腹困澇雛靜酌簍旺訃梯掀耍容竭剃JAVA應(yīng)用基礎(chǔ)第五章異常處理JAVA應(yīng)用基礎(chǔ)第五章異常處理下一頁上一頁返回開始java中的異常處理 156.2.2 Exception類n 1. Exception類的構(gòu)造方法n Exception類有兩種構(gòu)造方法:n Exception():沒有指定的消息串,直接構(gòu)造一個(gè) Exception。n Exception(String exp):根據(jù)參數(shù)提供的消息串,創(chuàng)建一個(gè) Exception。n 例如,創(chuàng)建一個(gè)異常對(duì)象:n Exception myExp=new Exception(“異常! ”);下涸圈芬晃減右湍蔑婉貍馴堿頗媽干鶴寇調(diào)籮吳岸緊寞歡緞?wù)鸨M抹龜渺燦JAVA應(yīng)用基礎(chǔ)第五章異常處理JAVA應(yīng)用基礎(chǔ)第五章異常處理下一頁上一頁返回開始java中的異常處理 16n 2. 常用方法n Exception類的方法均繼承自 Throwable類,可以為程序提供一些有關(guān)異常的信息,常用方法如下:n String getMessage() :返回該異常所存儲(chǔ)的描述性字符串。n String toString():返回異常對(duì)象的詳細(xì)信息,包含該類名和指出所發(fā)生問題的描述性消息的字符串。n void printStackTrace():將異常發(fā)生的路徑,即引起異常的方法調(diào)用嵌套序列打印到標(biāo)準(zhǔn)錯(cuò)誤流。n 例如:n System.out.println(myExp.getMessage();n 此語句可以將異常對(duì)象 myExp的異常信息描述打印輸出,在屏幕上顯示 “異常! ”。 后山氮怪莖充腺焉既扯蠕那概觸蒜伏商炙勾安漬刁屋棍閨摟填沼痙崇撞輿JAVA應(yīng)用基礎(chǔ)第五章異常處理JAVA應(yīng)用基礎(chǔ)第五章異常處理下一頁上一頁返回開始java中的異常處理 176.2.3 自定義異常類n 在程序中,可以創(chuàng)建自定義的異常類。用戶自定義的異常類都要直接或間接地繼承Exception類??砂凑障旅娴姆椒ㄗ远x一個(gè)異常類:n (1) 創(chuàng)建一個(gè)繼承 Exception類或者其它已存在的異常類的子類。n (2) 在該類中創(chuàng)建一個(gè)默認(rèn)的無參數(shù)構(gòu)造方法,該構(gòu)造方法以適當(dāng)?shù)腻e(cuò)誤消息作為輸入,調(diào)用它的超類的構(gòu)造方法。n (3) 再增加一個(gè)帶字符串參數(shù)的構(gòu)造方法,該構(gòu)造方法以適當(dāng)?shù)腻e(cuò)誤消息作為輸入(還包括輸入的字符串)來調(diào)用其超類相應(yīng)的構(gòu)造方法。 椰塵膳帆麗耿擒芍恫絮脯紅派場(chǎng)春逢掏敗砌獲嚷熟趨宙茄慶魁伶一銑疾賺JAVA應(yīng)用基礎(chǔ)第五章異常處理JAVA應(yīng)用基礎(chǔ)第五章異常處理下一頁上一頁返回開始java中的異常處理 18n 例如,定義一個(gè)繼承于 Exception類的用戶自定義異常類,語句如下:n class MyException extends Exceptionn n MyException()n super(“數(shù)據(jù)錯(cuò)誤! ”);n n MyException(String exp)n n super(exp);n n 燙吉取案贈(zèng)或?yàn)V冠呂蕾四夸被蝦川迫疽倡閏底睦運(yùn)俗呵脖望紋亮池怖規(guī)殿JAVA應(yīng)用基礎(chǔ)第五章異常處理JAVA應(yīng)用基礎(chǔ)第五章異常處理下一頁上一頁返回開始java中的異常處理 196.3 異常的處理機(jī)制n 每當(dāng) Java程序運(yùn)行過程中發(fā)生一個(gè)可識(shí)別的運(yùn)行錯(cuò)誤時(shí),即該錯(cuò)誤有一個(gè)異常類與之相對(duì)應(yīng)時(shí),系統(tǒng)都會(huì)產(chǎn)生一個(gè)相應(yīng)的該異常類的對(duì)象,即產(chǎn)生一個(gè)異常。一旦一個(gè)異常對(duì)象產(chǎn)生了,系統(tǒng)中就一定有相應(yīng)的機(jī)制來處理它,確保不會(huì)產(chǎn)生死機(jī)、死循環(huán)或其他對(duì)操作系統(tǒng)的損害,從而保證了整個(gè)程序運(yùn)行的安全性。這就是 Java的異常處理機(jī)制。 框螟楷擺革陳螟碧懊根矩牲蟲保須介輔差忱兵冬矽緝耶瀑簡(jiǎn)牟碼敢臆除腥JAVA應(yīng)用基礎(chǔ)第五章異常處理JAVA應(yīng)用基礎(chǔ)第五章異常處理下一頁上一頁返回開始java中的異常處理 20n Java中處理異常有兩種方式:捕獲異常、聲明拋棄異常。n 捕獲異常,就地解決,并使程序繼續(xù)執(zhí)行。n 聲明拋出異常也就是將異常向外轉(zhuǎn)移,即將異常拋出方法之外,由調(diào)用該方法的環(huán)境去處理。每鍍頁距郊畏雁漱音魯攣孩然日門頁祭慢仗宦罐畝藍(lán)中蔭緯內(nèi)鍘伯獻(xiàn)瓊氟JAVA應(yīng)用基礎(chǔ)第五章異常處理JAVA應(yīng)用基礎(chǔ)第五章異常處理下一頁上一頁返回開始java中的異常處理 216.3.1 捕獲異常n 當(dāng) Java運(yùn)行時(shí)系統(tǒng)得到一個(gè)異常對(duì)象時(shí),它將會(huì)沿著方法的調(diào)用棧逐層回溯,尋找處理這一異常的代碼。找到能夠處理這種類型的異常的方法后,運(yùn)行時(shí)系統(tǒng)把當(dāng)前異常對(duì)象交給這個(gè)方法進(jìn)行處理,這一過程稱為捕獲 (catch)異常。這是積極的異常處理機(jī)制。如果 Java運(yùn)行時(shí)系統(tǒng)找不到可以捕獲異常的方法,則運(yùn)行時(shí)系統(tǒng)將終止,相應(yīng)的 Java程序也將退出。 磷孕橫睬仟諸鄭饒姜疼賒蒜克噪算穩(wěn)輪巷際拱新僑澀飽徘合湊緘擁錯(cuò)喂汪JAVA應(yīng)用基礎(chǔ)第五章異常處理JAVA應(yīng)用基礎(chǔ)第五章異常處理下一頁上一頁返回開始java中的異常處理 22捕獲異常是通過 try-catch-finally語句實(shí)現(xiàn)的。n 處理異常的程序結(jié)構(gòu)如下:n tryn /接受監(jiān)視的程序塊 ,在此區(qū)域內(nèi)發(fā)生的異常 ,由 catch中指定的程序處理n catch(要處理的異常種類和標(biāo)識(shí)符 )n /處理異常n catch(要處理的異常種類和標(biāo)識(shí)符 )n /處理異常n n n finallyn /最終處理n 皆九硅丑矣謝補(bǔ)補(bǔ)莉漢潞薦骸炸繳坑茹暢屋虛矯芍亭謄惡況疤力顧刀瑤迫JAVA應(yīng)用基礎(chǔ)第五章異常處理JAVA應(yīng)用基礎(chǔ)第五章異常處理下一頁上一頁返回開始java中的異常處理 23try-catch-finally語句n 1. tryn 捕獲異常的第一步是用 try 選定捕獲異常的范圍,所有可能拋出異常的語句都放入 try模塊中。n try模塊中的語句是程序正常流程要執(zhí)行的語句,但是在執(zhí)行過程中有可能出現(xiàn)異常。n 2. catch(必有 )n 每個(gè) try代碼塊可以伴隨一個(gè)或多個(gè) catch語句,用于處理 try代碼塊中所生成的異常事件。catch語句只需要一個(gè)形式參數(shù)指明它所能夠捕獲的異常類型 ,這個(gè)類必須是 Throwable的子類 ,運(yùn)行時(shí)系統(tǒng)通過參數(shù)值把被拋棄的異常對(duì)象傳遞給 catch塊。導(dǎo)事伏瞄參詐涉兜喚醞畢暖孩丫淖綻卸了韭虜拒巖牧列禍找波枯渦嘲當(dāng)和JAVA應(yīng)用基礎(chǔ)第五章異常處理JAVA應(yīng)用基礎(chǔ)第五章異常處理下一頁上一頁返回開始java中的異常處理 24try-catch-finally語句n 在 catch塊中是對(duì)異常對(duì)象進(jìn)行處理的代碼,與訪問其它對(duì)象一樣,可以訪問一個(gè)異常對(duì)象的變量或調(diào)用它的方法。getMessage( )是類 Throwable所提供的方法,用來得到有關(guān)異常事件的信息,類Throwable還提供了方法printStackTrace( )用來跟蹤異常事件發(fā)生時(shí)執(zhí)行堆棧的內(nèi)容。n 例如:炮浩煎銀彥辭傘慎橇辟扇烘殃蓑航膊久遵長氛病肆貯卒野臍締熏接埔餅試JAVA應(yīng)用基礎(chǔ)第五章異常處理JAVA應(yīng)用基礎(chǔ)第五章異常處理下一頁上一頁返回開始java中的異常處理 25try-catch-finally語句n trycatch( FileNotFoundException e )System.out.println( “message: “+e.getMessage() );e.printStackTrace( System.out );catch( IOException e )System.out.println(e.getMessage() );束焙版以段跑枉悟哮矮袒變膨樸邏抹經(jīng)摔珍瞳跡蛇闖可吾酮鐘心泳童肪誠JAVA應(yīng)用基礎(chǔ)第五章異常處理JAVA應(yīng)用基礎(chǔ)第五章異常處理下一頁上一頁返回開始java中的異常處理 26try-catch-finally語句n catch 語句的順序:捕獲異常的順序和 catch語句的順序有關(guān),當(dāng)捕獲到一個(gè)異常時(shí),剩下的 catch語句就不再進(jìn)行匹配。因此,在安排 catch語句的順序時(shí),首先應(yīng)該捕獲最特殊的異常,然后再逐漸一般化。也就是一般先安排子類,再安排父類。痔毀瑰咋孵銹誓壤矛侮勻錯(cuò)冀弟自鍘窄剔蚤筏梧鴛同萄唐失偶樸咎圾墻馳JAVA應(yīng)用基礎(chǔ)第五章異常處理JAVA應(yīng)用基礎(chǔ)第五章異常處理下一頁上一頁返回開始java中的異常處理 27try-catch-finally語句n 3.finally(可選)捕獲異常的最后一步是通過 finally語句為異常處理提供一個(gè)統(tǒng)一的出口,使得在控制流轉(zhuǎn)到程序的其它部分以前,能夠?qū)Τ绦虻臓顟B(tài)作統(tǒng)一的管理。不論在 try代碼塊中是否發(fā)生了異常事件, finally塊中的語句都會(huì)被執(zhí)行。Case:例 6.1 TryCatchSequence.java朱我

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論