




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第第9章章 異常異常了解異常的概念,及Java中常用異常類(lèi);能熟練使用各種異常處理的結(jié)構(gòu)自定義異常9.1 異常的概念異常的概念在程序設(shè)計(jì)過(guò)程中有兩種錯(cuò)誤:編譯錯(cuò)誤編譯能檢查出來(lái))運(yùn)行時(shí)錯(cuò)誤異常)異常通常指的是:程序運(yùn)行中,導(dǎo)致整個(gè)程序無(wú)法繼續(xù)運(yùn)行的錯(cuò)誤;Java中提出異常這個(gè)概念的原因是:以面向?qū)ο蟮姆绞教幚沓绦蛑锌深A(yù)見(jiàn)的錯(cuò)誤,將正確的代碼段和錯(cuò)誤的代碼段分離;也為編寫(xiě)一個(gè)穩(wěn)健的程序提供了保障;Java中異常處理機(jī)制就是:拋?zhàn)ツJ?.2 Java中異常類(lèi)的層次結(jié)構(gòu)中異常類(lèi)的層次結(jié)構(gòu)Error類(lèi)體系描述了Java運(yùn)行系統(tǒng)中的內(nèi)部錯(cuò)誤及資源耗盡等情況,這種錯(cuò)誤一般都是災(zāi)難性的錯(cuò)誤,一般不在程序中捕
2、獲處理;從RuntimeException派生出來(lái)的異?;旧隙际欠菣z查性異常,這類(lèi)異常大部分是程序員可以避免的,因此這種異常Java不強(qiáng)制要求在程序中捕獲處理;從非RuntimeException派生出來(lái)的異?;旧隙际菣z查性異常,這類(lèi)異常很可能是由可預(yù)知的外界原因造成的,要求必須在程序中捕獲處理。9.3 Java中常用的異常類(lèi)中常用的異常類(lèi)異異 常常說(shuō)說(shuō) 明明Exception異常層次結(jié)構(gòu)的根類(lèi)異常層次結(jié)構(gòu)的根類(lèi)RuntimeException許多許多java.lang異常的基類(lèi)異常的基類(lèi)ArithmeticException算術(shù)異常,如:除數(shù)為算術(shù)異常,如:除數(shù)為0IllegalArgu
3、mentException方法接收到非法參數(shù)方法接收到非法參數(shù)ArrayIndexOutOfBoundsException數(shù)組下標(biāo)越界數(shù)組下標(biāo)越界NullPointerException訪問(wèn)空引用訪問(wèn)空引用ClassNotFoundException不能加載所需的類(lèi)不能加載所需的類(lèi)NumberFormatException字符串轉(zhuǎn)換數(shù)字失敗字符串轉(zhuǎn)換數(shù)字失敗IOExceptionI/O異常的根類(lèi)異常的根類(lèi)FileNotFoundException找不到文件找不到文件EOFException文件結(jié)束文件結(jié)束9.4 異常的捕捉與處理異常的捕捉與處理Java程序在執(zhí)行過(guò)程中如出現(xiàn)異常,會(huì)自動(dòng)生成一個(gè)
4、異常類(lèi)對(duì)象,該異常類(lèi)對(duì)象被提交給Java運(yùn)行時(shí)系統(tǒng),這個(gè)過(guò)程稱(chēng)為拋出throw異常;當(dāng)Java運(yùn)行時(shí)系統(tǒng)接收到異常對(duì)象時(shí),會(huì)尋找能處理這一異常的代碼,并把當(dāng)前異常對(duì)象交給其處理,這一過(guò)程稱(chēng)為捕獲catch異常;如果Java運(yùn)行時(shí)系統(tǒng)找不到可以捕獲異常的方法,則運(yùn)行時(shí)系統(tǒng)將終止,相應(yīng)的Java程序也將退出;Java中用try、catch語(yǔ)句進(jìn)行異常處理。父類(lèi)異常可以捕獲其子類(lèi)異常9.4.1 try/catch塊的一般形式塊的一般形式try /監(jiān)視有可能發(fā)生異常的代碼段監(jiān)視有可能發(fā)生異常的代碼段catch (異常類(lèi)型異常類(lèi)型) /捕獲發(fā)生的異常捕獲發(fā)生的異常 /對(duì)異常進(jìn)行處理對(duì)異常進(jìn)行處理clas
5、s Excep public int division(int a, int b) try return a/b; catch(ArithmeticException e) System.out.println(cant division zero);return 0;class CatchTest public static void main(String args) Excep ex = new Excep();int i = ex.division(4, 0);try/catch示例示例9.4.2 多多catch結(jié)構(gòu)結(jié)構(gòu)子異常寫(xiě)在前,父異常寫(xiě)在后;多重catch塊只會(huì)捕捉到最先產(chǎn)生的異
6、常,而不是把所有的異常全部捕捉完;class MultCatchTest public static void main(String args) try int i0 = Integer.parseInt(args0);int i1 = Integer.parseInt(args1);int i = i0/i1; catch (ArithmeticException e) System.out.println(cant division zero);e.printStackTrace(); catch (ArrayIndexOutOfBoundsException e) System.out
7、.println(ArrayOut);e.printStackTrace();9.4.3 嵌套結(jié)構(gòu)嵌套結(jié)構(gòu)class MultCatchTest public static void main(String args) try int i0 = 1;int i1 = 1;try i0 = Integer.parseInt(args0); i1 = Integer.parseInt(args1); catch (ArrayIndexOutOfBoundsException e) System.out.println(ArrayOut);e.printStackTrace();int i = i0
8、/i1; catch (ArithmeticException e) System.out.println(cant division zero);e.printStackTrace();9.4.4 finally子句子句finally子句的使用就是要try中的代碼是否拋出異常,程序都執(zhí)行它;try代碼不拋出異常,try執(zhí)行完后執(zhí)行它;try代碼拋出的異常在catch子句中被捕獲,catch執(zhí)行完后執(zhí)行它;try代碼拋出異常,但未在任何catch子句中捕獲,執(zhí)行完finally后再向系統(tǒng)拋出異常;當(dāng)try或catch中有return語(yǔ)句時(shí),會(huì)執(zhí)行完finally子句再返回,這時(shí)它就顯得更為有用
9、;Finally子句中一般是關(guān)閉某個(gè)文件、數(shù)據(jù)庫(kù)連接等等。try/catch/finally應(yīng)用模型應(yīng)用模型try /連接到數(shù)據(jù)庫(kù)的代碼,有可能發(fā)生異常連接到數(shù)據(jù)庫(kù)的代碼,有可能發(fā)生異常 /對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作的代碼,有可能發(fā)生異常對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作的代碼,有可能發(fā)生異常catch (SQLException sqle) /捕獲數(shù)據(jù)庫(kù)異常捕獲數(shù)據(jù)庫(kù)異常 /對(duì)捕獲的異常進(jìn)行處理對(duì)捕獲的異常進(jìn)行處理finally /在在finally塊中執(zhí)行關(guān)閉數(shù)據(jù)庫(kù)的操作塊中執(zhí)行關(guān)閉數(shù)據(jù)庫(kù)的操作class MultCatchTest public static void main(String args) try i
10、nt i0 = Integer.parseInt(args0);int i1 = Integer.parseInt(args1);int i = i0/i1; catch (ArithmeticException e) System.out.println(cant division zero);e.printStackTrace(); catch (ArrayIndexOutOfBoundsException e) System.out.println(ArrayOut);e.printStackTrace();finally System.out.println(finally);try/
11、catchfinally示例9.5 throws和和throwjava中的異常可以一層層向上傳遞,直至虛擬機(jī);Throws就是用于聲明方法拋出的異常。此時(shí)這個(gè)異常就不用在方法中用try/catch語(yǔ)句處理了,而是向上一層傳達(dá),讓其調(diào)用者去處理。一句話:方法中的異常要么用try/catch語(yǔ)句捕獲處理,要么用throws向外聲明;main方法也可以聲明拋出異常,此時(shí)就拋給虛擬機(jī)了;語(yǔ)法:修飾符 返回類(lèi)型 方法名形參列表throws 異常列表多個(gè)異常用逗號(hào)隔開(kāi);留意: 1、throws聲明的異常只能是方法中拋出的異常,或其父類(lèi);2、方法用throws聲明的檢查性異常,其調(diào)用必須處理或向上聲明,否則
12、不會(huì)通過(guò)編譯;3、方法覆蓋中對(duì)于異常聲明的限制;9.5.1 throws關(guān)鍵字關(guān)鍵字class Excep public int division(int a, int b) throws ArithmeticException return a/b;class CatchTest public static void main(String args) Excep ex = new Excep();try int i = ex.division(4, 0); catch(ArithmeticException e) e.printStackTrace();throws示例9.5.2 thro
13、w關(guān)鍵字關(guān)鍵字throw語(yǔ)句用于手工拋出異常;執(zhí)行流程將在throw語(yǔ)句后立即停止,轉(zhuǎn)而尋找與之類(lèi)型相匹配的catch塊;throw語(yǔ)句的語(yǔ)法是:throw 異常類(lèi)對(duì)象;class Excep public int division(int a, int b) try if(b=0) throw new ArithmeticException(); else return a/b; catch(ArithmeticException e) System.out.println(cant division zero);e.printStackTrace();return 0;throw 例如9.6 自定義異常自定義異常在Java 各個(gè)體系結(jié)構(gòu)中所提供的異常類(lèi)基本上能夠滿足用戶的開(kāi)發(fā)需求,但有的時(shí)候一些特殊的需求所需要的異常類(lèi)如果Java體系結(jié)構(gòu)中沒(méi)有提供,開(kāi)發(fā)者或者是第三方可以自行定義異常類(lèi)。定義異常類(lèi)的基本步驟: 1、繼承Exception類(lèi) 2、調(diào)用父類(lèi)的構(gòu)造方法,傳遞異常信息 3、使用自定義異常類(lèi)。所有的自定義異常類(lèi)都是非運(yùn)行時(shí)異常。自
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 個(gè)人借款合同民間借貸
- 有關(guān)房屋出售委托合同年
- 湖北房屋租賃合同
- 租賃房屋合同協(xié)議書(shū)
- 消防工程專(zhuān)業(yè)分包工程合同
- 建筑施工發(fā)包合同
- 電器售后服務(wù)合同書(shū)
- 事業(yè)單位聘用合同文本
- 產(chǎn)品購(gòu)銷(xiāo)合同的細(xì)節(jié)條款修訂書(shū)
- 重慶水利電力職業(yè)技術(shù)學(xué)院《建筑結(jié)構(gòu)抗震設(shè)計(jì)實(shí)驗(yàn)》2023-2024學(xué)年第二學(xué)期期末試卷
- 新版統(tǒng)編版一年級(jí)道德與法治下冊(cè)全冊(cè)教案(完整版)教學(xué)設(shè)計(jì)含教學(xué)反思
- 2025年春季學(xué)期學(xué)校德育工作計(jì)劃安排表(完整版)
- 《幼兒教育政策與法規(guī)》教案-單元4 幼兒園的保育和教育
- 電氣化基本知識(shí)-崗培教材編寫(xiě)86課件講解
- 2024年廣東省公務(wù)員錄用考試《行測(cè)》試題及答案解析
- 二手人防車(chē)位使用權(quán)轉(zhuǎn)讓協(xié)議書(shū)
- 人工智能需求文檔6篇
- 物流運(yùn)籌學(xué)課程標(biāo)準(zhǔn)
- 瀝青配合比全套試驗(yàn)自動(dòng)計(jì)算程序
- 物業(yè)集團(tuán)績(jī)效考核管理制度(完整版)
- 半導(dǎo)體真空精密部件清洗再生項(xiàng)目可行性研究報(bào)告-立項(xiàng)申請(qǐng)報(bào)告
評(píng)論
0/150
提交評(píng)論