版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、例外處理(Exception Handling),在Java中,程式錯(cuò)誤的處理可以藉由所謂的例外處理機(jī)制 (Exception-handling mechanism)來(lái)控制,因此為了能設(shè)計(jì)出穏定安全的程式,所有對(duì)Java程式設(shè)計(jì)有趣的人員都必需知道Java例外處理的原則。,精解Java2程式語(yǔ)言,例外處理,2,本章重點(diǎn),什麼是例外 例外的種類 如何指定例外的處理方式 列印例外物件的說(shuō)明 使用throws敘述 Throwable類別階層 自定例外 類別 Java Runtime如何決定例外處理常式,精解Java2程式語(yǔ)言,例外處理,3,什麼是例外,影響程式中指令敘述正常執(zhí)行順序的異常狀態(tài),例如:
2、 進(jìn)行除法運(yùn)算時(shí),分母值為零 存取陣列元素時(shí)所用的索引值超出陣列的大小 程式中欲開啟以便讀取資料的檔案尚未存在 記憶體不足 硬碟無(wú)法正常運(yùn)作,精解Java2程式語(yǔ)言,例外處理,4,異常狀態(tài)發(fā)生時(shí) Java Runtime會(huì)中止目前指令的執(zhí)行 產(chǎn)生描述此異常狀態(tài)之內(nèi)容的例外物件 (Exception Object) 並 決定如何進(jìn)一步處理此異常狀態(tài)。,精解Java2程式語(yǔ)言,例外處理,5,例外的種類,精解Java2程式語(yǔ)言,例外處理,6,Runtime Exception及Error由Java系統(tǒng)自行處理。 Checked Exception的處理則強(qiáng)制由程式設(shè)計(jì)師於程式中指定,若無(wú)指定則程式於
3、編譯時(shí)就可能產(chǎn)生如下之訊息:,UrlTest.java:10: Exception .MalformedURLException must be caught , or it must be declared in the throws clause of this method. URL url = new URL(args0);,精解Java2程式語(yǔ)言,例外處理,7,如何查閱線上Java API文件以取得各指令/方法所可能觸發(fā)之例外?,精解Java2程式語(yǔ)言,例外處理,8,精解Java2程式語(yǔ)言,例外處理,9,精解Java2程式語(yǔ)言,例外處理,10,精解Java2程式語(yǔ)言,例外處理,11,
4、精解Java2程式語(yǔ)言,例外處理,12,如何指定例外的處理方式,由下述的程式結(jié)構(gòu)決定:,try / 會(huì)產(chǎn)生例外的程式碼 java statements; /可以有一個(gè)以的catch區(qū)塊 catch (ExceptionType1 exObject1) / 處理例外型態(tài)一的程式碼 java statements-exception handling; catch (ExceptionType2 exObject2) / 處理例外型態(tài)二的程式碼 java statements-exception handling; / finally / 例外處理結(jié)束前執(zhí)行的程式碼 /本區(qū)塊可省略 java st
5、atements; ,精解Java2程式語(yǔ)言,例外處理,13,程式Ex7_3_1除數(shù)為零程式範(fàn)例,import java.io.*; class Exception1 public static void main (String args) int x, y; try y = 0; x = 44 / y; /本敘述會(huì)產(chǎn)生除數(shù)為零的Runtime Exception System.out.println(“Actually this line will not be printed”); catch (ArithmeticException e) / catch並處理除數(shù)為零的錯(cuò)誤 Syste
6、m.out.println(“Error-Divided by zero!”); finally /執(zhí)行Finally區(qū)塊的指令 System.out.println(“The statement in the Finally Block will always be executed!”); / end of main / end of class,精解Java2程式語(yǔ)言,例外處理,14,try區(qū)塊的指令會(huì)產(chǎn)生一個(gè)除數(shù)為零的例外 程式輸出,Error-Divide by zero! The statement in the Finally Block will always be execu
7、ted!,精解Java2程式語(yǔ)言,例外處理,15,列印例外物件的說(shuō)明,例外物件 的getMessage() 方法會(huì)傳回該例外的文字說(shuō)明:,catch (ArithmeticException e) / catch並處理除數(shù)為零的錯(cuò)誤 System.out.println(“Exception: ” + e.getMessage(); ,可能結(jié)果: Exception: / by zero The statement in the Finally Block will always be executed!,精解Java2程式語(yǔ)言,例外處理,16,使用throws敘述,throws關(guān)鍵字可以用來(lái)
8、指定由外層的方法來(lái)來(lái)處理例外,使用throws關(guān)鍵字的一般規(guī)定: type method-name (parameter-list) throws exception-list / body of method java statements; ,精解Java2程式語(yǔ)言,例外處理,17,程式Ex7_5_1使用throws程式範(fàn)例,import .*; public class UrlTest public static void main(String args) throws MalformedURLException if (args.length =1) URL url = new UR
9、L(args0); System.out.println (URL: + url.toExternalForm() + n + File: + url.getFile() + n + Host: + url.getHost() + n + Port: + url.getPort() + n + Protocol: + url.getProtocol() + n + Reference: + url.getRef(); else System.out.println(Usage: UrlTest ); ,精解Java2程式語(yǔ)言,例外處理,18,執(zhí)行方式: java UrlTest 輸出結(jié)果: E
10、xception in thread main .MalformedURLException: no protocol: at .URL.(Unknown Source) at .URL.(Unknown Source) at .URL.(Unknown Source) at UrlTest.main(UrlTest.java:9),精解Java2程式語(yǔ)言,例外處理,19,自行控制例外的產(chǎn)生,使用throw敘述觸發(fā)例外 狀態(tài) 一般語(yǔ)法: throw ThrowableInstance; 其中ThrowableInstance物件必需是Throwable類別或其子類別的成員 一般與自定例外配合使
11、用,精解Java2程式語(yǔ)言,例外處理,20,程式Ex7_6_1 使用throw敘述,import java.io.*; class ThrowDemo static void main(String args) try throw new IllegalAccessException(“demo Throw IllegalAccess Exception”); catch (IllegalAccessException e) System.out.println(“Exception caught: “ + e.getMessage(); ,輸出結(jié)果: Exception caught: de
12、mo Throw IllegalAcess Exception,精解Java2程式語(yǔ)言,例外處理,21,Throwable類別階層,精解Java2程式語(yǔ)言,例外處理,22,自定例外 類別,撰寫自定的例外: 首先必須自行定義一個(gè)屬於Throwable類別之後代的子類別 然後利用 new 指令建立一個(gè)自定之例外類別的物件 最後利用throw敘述觸發(fā)例外,精解Java2程式語(yǔ)言,例外處理,23,程式Ex7_8_1 自定例外類別 (1/4),import java.io.*; / 自定例外類別 class InvalidTransferException extends Exception Inval
13、idTransferException(String emsg) super(emsg); / invoke the constructor of the parent class / end of class,精解Java2程式語(yǔ)言,例外處理,24,/ 轉(zhuǎn)帳處理類別 class ExceptionDemo static int balance;/ 存放餘額的變數(shù) ExceptionDemo(int b) / 建構(gòu)子 balance = b; void transfer(int amount)throws InvalidTransferException if (amount balance)
14、 / 當(dāng)轉(zhuǎn)帳金額大於餘額時(shí)就產(chǎn)生例外 throw new InvalidTransferException(Transfer Amount greater than balance!); else balance = balance - amount; / 否則將餘額更新成扣除轉(zhuǎn)帳金額後之值 / end of method transfer / end of class ExceptionDemo,程式Ex7_8_1 自定例外類別 (2/4),精解Java2程式語(yǔ)言,例外處理,25,程式Ex7_8_1自定例外類別 (3/4),/ 測(cè)試自定例外類別的使用 public class MyExcep
15、tionDemo public static void main (String args) / 產(chǎn)生一個(gè)處理轉(zhuǎn)帳的類別並將餘額初值設(shè)為1500 ExceptionDemo edemo = new ExceptionDemo(1500); System.out.println(Balance before transfer: + edemo.balance); try edemo.transfer(2000); /進(jìn)行轉(zhuǎn)帳2000元的交易 System.out.println(Current Balance: + ExceptionDemo.balance); catch (InvalidTr
16、ansferException e) System.out.println(Exception caught: + e.getMessage(); / end of method main / end of class MyExceptionDemo,精解Java2程式語(yǔ)言,例外處理,26,執(zhí)行結(jié)果: Balance before transfer:1500 Exception caught: Transfer Amount greater than balance!,程式Ex7_8_1 自定例外類別 (4/4),精解Java2程式語(yǔ)言,例外處理,27,Java Runtime如何決定例外處理
17、常式,基本原則 由內(nèi)而外 由上而下 順序優(yōu)先,精解Java2程式語(yǔ)言,例外處理,28,由內(nèi)而外 當(dāng)有巢狀式的try區(qū)塊時(shí),Java Runtime會(huì)先從與最內(nèi)層的try區(qū)塊所對(duì)應(yīng)的catch區(qū)塊去尋找適當(dāng)?shù)睦馓幚沓J?,若沒有才去尋找外層的catch區(qū)塊,精解Java2程式語(yǔ)言,例外處理,29,由上而下 當(dāng)方法a呼叫方法b而方法b又呼叫方法c時(shí),若於方法c的執(zhí)行過程中產(chǎn)生了例外,則Java Runtime會(huì)依呼叫堆疊(Call Stack)中各方法出現(xiàn)的順序依序從上而下尋找處理常式,精解Java2程式語(yǔ)言,例外處理,30,精解Java2程式語(yǔ)言,例外處理,31,順序優(yōu)先 當(dāng)一個(gè)try區(qū)塊對(duì)應(yīng)有
18、一個(gè)以上的catch區(qū)塊時(shí),Java Runtime會(huì)按照各catch區(qū)塊在程式中出現(xiàn)的順序?qū)ふ液线m的處理常式,找到之後就執(zhí)行該處理常式的指令,其它的catch區(qū)塊則跳過不執(zhí)行 。,try / java statements catch(Exception e) / Exception handling routine catch(ArithmeticExceeption ae) / Arithmetic Exception handling routine catch(ArrayIndexOutOfBoundsException aiob) ,請(qǐng)注意: 右例簡(jiǎn)碼中 catch區(qū)塊出現(xiàn)的順序
19、並不好,編譯時(shí) 編譯器會(huì)視為有誤。,依排列順序找尋處理常式,精解Java2程式語(yǔ)言,例外處理,32,小結(jié):Java如何選定例外處理常式,精解Java2程式語(yǔ)言,例外處理,33,程式Ex7_10_1 決定例外處理常式的順序 (1/3),import java.io.*; import .*; public class ExceptionDemo / 程式執(zhí)行起點(diǎn) public static void main (String args) throws Exception / 建立ExceptionDemo的執(zhí)行物件 ExceptionDemo ed = new ExceptionDemo(); /引用方法a ed.a(); / 主動(dòng)觸發(fā)IOException例外 throw (new IOException(); ,精解Java2程式語(yǔ)言,例外處理,34,void a() throws MalformedURLException try /引用方法b b(); catch(MalformedURLException e) / 列印MalformedURLException的說(shuō)明訊息 System.out.println(Caught in main-+e.getMessage(); void b() throws Ma
溫馨提示
- 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 倉(cāng)儲(chǔ)安全生產(chǎn)會(huì)議制度
- 昆明市安全生產(chǎn)約談制度
- 2025年房地產(chǎn)項(xiàng)目營(yíng)銷策劃執(zhí)行手冊(cè)
- 2026年農(nóng)業(yè)技術(shù)員現(xiàn)代農(nóng)業(yè)種植技術(shù)及病蟲害防治知識(shí)測(cè)試題
- 2026年未來(lái)城市規(guī)劃與建筑發(fā)展趨勢(shì)考試題
- 2026年教育信息化教學(xué)資源整合案例題
- 小學(xué)體育試卷及答案
- 小升初真題及答案
- 2026年黑金風(fēng)企業(yè)年報(bào)成就與挑戰(zhàn)
- 2026年陶瓷材料抗壓實(shí)驗(yàn)流程
- 2026年及未來(lái)5年中國(guó)TFT液晶面板行業(yè)市場(chǎng)發(fā)展數(shù)據(jù)監(jiān)測(cè)及投資方向研究報(bào)告
- 大唐集團(tuán)機(jī)考行測(cè)題庫(kù)
- 車輛日常安全檢查課件
- 民航安全法律法規(guī)課件
- 山東省濟(jì)寧市2026屆第一學(xué)期高三質(zhì)量檢測(cè)期末考試濟(jì)寧一模英語(yǔ)(含答案)
- 光伏電站巡檢培訓(xùn)課件
- 年末節(jié)前安全教育培訓(xùn)
- 安全生產(chǎn)麻痹思想僥幸心理
- GB/T 93-2025緊固件彈簧墊圈標(biāo)準(zhǔn)型
- 建設(shè)工程測(cè)繪驗(yàn)線標(biāo)準(zhǔn)報(bào)告模板
- 統(tǒng)編版九年級(jí)上冊(cè)語(yǔ)文期末復(fù)習(xí):全冊(cè)重點(diǎn)考點(diǎn)手冊(cè)
評(píng)論
0/150
提交評(píng)論