版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第7章 Java的異常處理,學(xué)習(xí)內(nèi)容,什么是異常 異常的處理 自定義異常類的使用,什么是異常 示例1,請(qǐng)看圖書(shū)管理系統(tǒng)中的Tool類中的readFile2Memory方法:,7.1 什么是異常 示例1 續(xù),編譯錯(cuò)誤: 這說(shuō)明InputStreamReader 的構(gòu)造方法、readLine()和readLine()這個(gè)方法有可能產(chǎn)生異常,我們必須處理異常。,什么是異常 示例2,class ExceptionDemo2 public static void main( String args ) int a = 0; System.out.println( 5/a ); ,C:javac Exce
2、ptionDemo2.java C:java ExceptionDemo2 java.lang.ArithmeticException: / by zero at ExceptionDemo2.main(ExceptionDemo2.java:4),除0產(chǎn)生運(yùn)行期異常。,什么是異常 示例2 續(xù).,這個(gè)程序沒(méi)有編譯錯(cuò)誤,但是運(yùn)行時(shí)期產(chǎn)生錯(cuò)誤: java.lang.ArithmeticException: / by zero atExceptionDemo2.main(ExceptionDemo2.java:4) 從上面的兩個(gè)示例可以看出異常有兩種: 一種是編譯期異常 check exceptio
3、n 一種是運(yùn)行期異常 runtime exception,異常處理機(jī)制,兩種處理異常的機(jī)制: 捕獲異常: 當(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)行處理,這一過(guò)程稱為捕獲(catch)異常。這是積極的異常處理機(jī)制。如果Java運(yùn)行時(shí)系統(tǒng)找不到可以捕獲異常的方法,則運(yùn)行時(shí)系統(tǒng)將終止,相應(yīng)的Java程序也將退出。 聲明拋棄異常: 如果一個(gè)方法并不知道如何處理所出現(xiàn)的異常,則可在方法聲明時(shí),聲明拋棄(throws)異常。這是一種消極的異常處理機(jī)制。,異常類的層次,異常類的
4、層次 續(xù),Java中的異常類可分為兩大類: Error Exception 它們都直接或間接地繼承于Throwable類。,7.2 異常的處理,Java語(yǔ)言中有兩種異常處理機(jī)制: 捕獲異常 聲明拋棄異常,圖書(shū)管理系統(tǒng)中Tool類的部分代碼:,try readfile = new FileInputStream(dbFile); ir = new InputStreamReader(readfile); in = new BufferedReader(ir); String str = in.readLine(); while (str != null) / System.out.println
5、(str); str = str.trim(); String splitString = null; int hasSplitChar = str.indexOf(COMMA_SIGN_DELIMITERS); if (hasSplitChar != -1) splitString = str.split(COMMA_SIGN_DELIMITERS); configMap.put(splitString0, str); else throw new SplitCharException(splite char error.); str = in.readLine(); catch (IOEx
6、ception e) throw new FileReadException(read file error.); finally ,捕獲異常,捕獲異常是通過(guò)try-catch-finally語(yǔ)句實(shí)現(xiàn) : try 捕獲異常的第一步是用try選定捕獲異常的范圍,由try所限定的代碼塊中的語(yǔ)句在執(zhí)行過(guò)程中可能會(huì)生成異常對(duì)象并拋棄。 catch 每個(gè)try代碼塊可以伴隨一個(gè)或多個(gè)catch語(yǔ)句,用于處理try代碼塊中所生成的異常事件。catch語(yǔ)句只需要一個(gè)形式參數(shù)指明它所能夠捕獲的異常類型,這個(gè)類必須是Throwable的子類,運(yùn)行時(shí)系統(tǒng)通過(guò)參數(shù)值把被拋棄的異常對(duì)象傳遞給catch塊。,捕獲異常
7、續(xù),catch 語(yǔ)句的順序: 捕獲異常的順序和catch語(yǔ)句的順序有關(guān),當(dāng)捕獲到一個(gè)異常時(shí),剩下的catch語(yǔ)句就不再進(jìn)行匹配。因此,在安排catch語(yǔ)句的順序時(shí),首先應(yīng)該捕獲最特殊的異常,然后再逐漸一般化。也就是一般先安排子類,再安排父類。 IOException 是FileNotFoundException 父類。,try . catch( FileNotFoundException e ) System.out.println( e ); System.out.println( message: +e.getMessage() ); e.printStackTrace( System.o
8、ut ); catch( IOException e ) System.out.println( e ); ,捕獲異常 續(xù),finally 捕獲異常的最后一步是通過(guò)finally語(yǔ)句為異常處理提供一個(gè)統(tǒng)一的出口,使得在控制流轉(zhuǎn)到程序的其它部分以前,能夠?qū)Τ绦虻臓顟B(tài)作統(tǒng)一的管理。不論在try代碼塊中是否發(fā)生了異常事件,finally塊中的語(yǔ)句都會(huì)被執(zhí)行。,聲明拋棄異常,如果在一個(gè)方法中生成了一個(gè)異常,但是這一方法并不確切地知道該如何對(duì)這一異常事件進(jìn)行處理,這時(shí),一個(gè)方法就應(yīng)該聲明拋棄異常,使得異常對(duì)象可以從調(diào)用棧向后傳播,直到有合適的方法捕獲它為止。 聲明拋棄異常是在一個(gè)方法聲明中的throws
9、子句中指明的。例如:,public int read () throws IOException . ,聲明拋棄異常 續(xù),throws子句中同時(shí)可以指明多個(gè)異常,之間由逗號(hào)隔開(kāi)。例如:,public static void main(String args) throws IOException,IndexOutOfBoundsException ,拋出異常,拋出異常就是產(chǎn)生異常對(duì)象的過(guò)程,首先要生成異常對(duì)象,異?;蛘哂商摂M機(jī)生成,或者由某些類的實(shí)例生成,也可以在程序中生成。在方法中,拋出異常對(duì)象是通過(guò)throw語(yǔ)句實(shí)現(xiàn)的。 例如: 可以拋出的異常必須是Throwable或其子類的實(shí)例。下面的
10、語(yǔ)句在編譯時(shí)將會(huì)產(chǎn)生語(yǔ)法錯(cuò)誤:,IOException e=new IOException(); throw e ;,throw new String(want to throw);,自定義異常類的使用,在圖書(shū)管理系統(tǒng)中我們自定義兩個(gè)異常類:FileReadException和SplitCharException。 自定義異常類圖:,自定義異常類的使用 續(xù),自定義異常類FileReadException:,import java.io.IOException; public class FileReadException extends IOException public FileReadException() super(); public
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 江蘇省蘇州陸慕高級(jí)中學(xué)2025屆物理高一上期中經(jīng)典模擬試題含解析
- 重慶市部分區(qū)縣2025屆高二物理第一學(xué)期期中檢測(cè)模擬試題含解析
- 2025屆青海省西寧市城西區(qū)海湖中學(xué)物理高一上期末學(xué)業(yè)水平測(cè)試試題含解析
- 2025屆安徽省滁州市部分示范高中物理高一上期中質(zhì)量跟蹤監(jiān)視試題含解析
- 2025屆廣西融水苗族自治縣中學(xué)物理高二上期末復(fù)習(xí)檢測(cè)試題含解析
- 江西省寧師中學(xué)、瑞金二中2025屆物理高二第一學(xué)期期中綜合測(cè)試模擬試題含解析
- 2025屆吉林省榆樹(shù)市一中物理高三上期末經(jīng)典模擬試題含解析
- 2025屆福清市福清華僑中學(xué)物理高三上期末經(jīng)典試題含解析
- 2025屆上海市市西初級(jí)中學(xué)物理高一上期末教學(xué)質(zhì)量檢測(cè)試題含解析
- 2025屆安徽省皖北名校聯(lián)盟高一物理第一學(xué)期期末學(xué)業(yè)水平測(cè)試試題含解析
- 人教版小學(xué)數(shù)學(xué)一年級(jí)上冊(cè)小學(xué)生口算天天練
- 讓成長(zhǎng)不煩惱小學(xué)生青春期性教育
- 輸血相關(guān)移植物抗宿主疾病課件
- 5.2探秘人工智能+教學(xué)設(shè)計(jì)
- 《工程項(xiàng)目審計(jì)》課件
- 四年級(jí)(上)體育課教案
- 郵儲(chǔ)高級(jí)練習(xí)卷二(第7章-第11章)附有答案
- 2024年巴西機(jī)器人工具快換裝置市場(chǎng)機(jī)會(huì)及渠道調(diào)研報(bào)告
- 基礎(chǔ)教育質(zhì)量提升調(diào)研報(bào)告(3篇模板)
- JT-T-1116-2017公路鐵路并行路段設(shè)計(jì)技術(shù)規(guī)范
- 幼兒園中班語(yǔ)言課件:《秋媽媽和果娃娃》
評(píng)論
0/150
提交評(píng)論