版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第七章異常處理
Java程序設(shè)計本章主要內(nèi)容
異常的概念處理異常自定義異常小結(jié)2024/12/24李飛——計算中心2/22異常的概念凡是在運(yùn)行時進(jìn)入的不正常狀態(tài)都稱為錯誤。這些錯誤根據(jù)錯誤的嚴(yán)重性可以分為兩類:一類是致命性的錯誤,它們的出現(xiàn)可能會導(dǎo)致系統(tǒng)崩潰,并且程序員并不能編寫程序解決所出現(xiàn)的問題;另一類是普通級的錯誤,這類錯誤如果不加控制就會使程序非正常中斷,但如果編寫代碼來處理的話,就有可能避免中斷程序的執(zhí)行。這類錯誤就為異常(Exception),就是指程序中出現(xiàn)的問題或不常見的情形。2024/12/24李飛——東北大學(xué)秦皇島分校計算中心3/22程序中錯誤的類型語法錯誤語法錯誤是由于程序員編寫的代碼存在語法問題,導(dǎo)致源代碼在編譯成為字節(jié)碼過程中產(chǎn)生的錯,它由Java語言的編譯系統(tǒng)負(fù)責(zé)監(jiān)測和報告。運(yùn)行錯誤運(yùn)行錯誤是在程序執(zhí)行過程中產(chǎn)生的錯誤,只有在程序運(yùn)行時才能發(fā)現(xiàn)。這類錯誤如被0除,數(shù)組下標(biāo)越界,聲明了變量或?qū)ο笠脜s不使用等。邏輯錯誤由于循環(huán)條件或選擇條件沒有寫正確導(dǎo)致的錯誤或由于涉及的程序邏輯有問題而導(dǎo)致的錯誤。對于這類錯誤,Java語言的編譯系統(tǒng)無法處理,Java也沒有相應(yīng)的處理措施。2024/12/24李飛——東北大學(xué)秦皇島分校計算中心4/22JDK中異常類的結(jié)構(gòu)
2024/12/24李飛——東北大學(xué)秦皇島分校計算中心5/22Exception類
在Java中,有些異常是Java編譯器要求必須處理的,JDK把這些異常的特征和一些通用的處理方法定義成了Exception類及其子類。當(dāng)程序編譯過程中一旦檢測出有可能發(fā)生這些異常情況,Java的編譯系統(tǒng)會自動生成相應(yīng)的異常類的實例對象,并要求應(yīng)用程序來處理,如果應(yīng)用程序中沒有它們的處理程序,系統(tǒng)則編譯失敗并報告異常產(chǎn)生的信息。2024/12/24李飛——東北大學(xué)秦皇島分校計算中心6/22常見的Exception類的子類子類名說明AWTException圖形界面組件異常。ClassNotFoundException指定類或接口不存在異常。DataFormatException數(shù)據(jù)格式異常。FontFormatException字體格式異常。IllegalAccessException非法訪問異常,如試圖訪問非公有方法。InstantiationException實例化異常,如實例化抽象類。InterruptedException中斷異常。IOException輸入輸出異常。NoSuchFieldException找不到指定的字段異常。NoSuchMethodException找不到指定方法異常。PrintException打印機(jī)錯誤報告異常。RuntimeException運(yùn)行時異常。SQLExceptionSQL語句執(zhí)行錯誤異常。TimeoutException線程阻塞超時異常。TransformException執(zhí)行轉(zhuǎn)換算法異常。2024/12/24李飛——東北大學(xué)秦皇島分校計算中心7/22常見的RuntimeException類的子類子類名說明ArithmeticException除數(shù)為0異常。ArrayIndexOutOfBoundsException訪問數(shù)組下標(biāo)越界異常。CalssCaseException類強(qiáng)制轉(zhuǎn)換異常。IllegealArgumentException非法參數(shù)異常。IllegalStateException非法或不適當(dāng)?shù)臅r間調(diào)用方法異常。IndexOutOfBoundsException下標(biāo)越界異常。MissingResourceException找不到資源異常。NagativeArraySizeException數(shù)組長度為負(fù)數(shù)異常。NullPointerException空指針異常。NumberFormatException數(shù)值格式異常。ArrayStoreException由于數(shù)組空間不夠引起的數(shù)組存儲異常。EventException事件異常,如果事件的類型不是在調(diào)用該方法之前通過初始化該事件指定的事件時拋出。2024/12/24李飛——東北大學(xué)秦皇島分校計算中心8/227.2處理異常
在Java中異常被定義為一類對象。當(dāng)執(zhí)行程序中的方法發(fā)生錯誤時,Java會根據(jù)錯誤的類型創(chuàng)建一個異常對象并交給運(yùn)行時系統(tǒng)。拋出異常:我們把創(chuàng)建異常對象并將它交給運(yùn)行時系統(tǒng)的過程稱為拋出異常。捕獲異常:我們把選擇合適的異常處理方法并將異常傳遞給它的過程稱為異常的捕獲異常處理:把執(zhí)行異常處理程序的過程叫異常的處理。2024/12/24李飛——東北大學(xué)秦皇島分校計算中心9/22異常處理的語句try{
可能產(chǎn)生異常的語句;}catch(要捕獲的異常類名異常對象名){
異常處理程序;}……finally{
一定會運(yùn)行的程序;}2024/12/24李飛——東北大學(xué)秦皇島分校計算中心10/221.try程序塊中在運(yùn)行時產(chǎn)生異常時,程序運(yùn)行中斷,并拋出相應(yīng)的異常對象。2.拋出的異常對象如果屬于catch括號中要捕獲的異常類,則catch會捕獲此異常,且為該異常創(chuàng)建一個引用名,然后執(zhí)行catch程序塊中的異常處理程序。其中“……”表示多個catch程序塊,每個catch程序塊捕獲一種異常。3.無論try程序塊是否捕獲到異常,或者捕獲到的異常是否與catch()括號內(nèi)的異常類型相同,最后一定會運(yùn)行finally塊里的程序代碼。4.finally塊運(yùn)行結(jié)束后,程序繼續(xù)運(yùn)行try-catch-finally塊后面的代碼。例7.1:異常處理舉例importjava.util.Scanner;publicclasseg7_1{ publicstaticvoidmain(String[]args){ inta=0,b,c=0; Scanners=newScanner(System.in); try{ a=9; b=s.nextInt(); c=a/b; }catch(ArithmeticExceptione){ System.out.println("請輸入非0值"); b=1; c=a/b; } System.out.println("你好,異常處理完畢!"); System.out.println(c); }}2024/12/24李飛——東北大學(xué)秦皇島分校計算中心11/22異常捕獲策略盡可能只捕獲指定的異常,而不是捕獲多個異常的公共父類,除非確信這個異常的所有子類對程序來說是沒有差別的,可以同樣的方式來處理它們,同時也要考慮該異常將來可能的擴(kuò)展。只要有可能,就不要捕獲java.lang.Exception或java.lang.Throwable。如果有多個指定的異常需要處理,可以多寫幾個catch代碼塊,或者捕獲多個異常的公共父類,只要不是java.lang.Exception或java.lang.Throwable就行。一般情況下不要捕獲RuntimeException或Error,除非這些異常并不代表程序或系統(tǒng)的錯誤。讓這些標(biāo)志著程序或系統(tǒng)的異常沿著調(diào)用棧,一直傳遞到最上層的嚴(yán)重錯誤處理程序中。重構(gòu)代碼時,仔細(xì)觀察因為代碼的改變而變得多余的catch代碼塊。因為編譯器并不是總能發(fā)現(xiàn)這類問題。2024/12/24李飛——東北大學(xué)秦皇島分校計算中心12/22異常的拋出在Java中,一旦軟件運(yùn)行過程出現(xiàn)異常,我們有三種方法來處理它。在發(fā)生異常的同時,通過try-catch-finally語句直接處理,這種處理方法被稱為程序內(nèi)部處理;另一種是程序員不對方法程序中產(chǎn)生的異常編寫處理程序,僅僅在可能出現(xiàn)異常的方法的方法聲明部分添加一個拋出異常的關(guān)鍵字說明這些異常由系統(tǒng)來處理。還有一種是結(jié)合系統(tǒng)處理和程序員編程兩種方式處理異常。2024/12/24李飛——東北大學(xué)秦皇島分校計算中心13/22異常的拋出throws子句要想把方法運(yùn)行過程中的異常拋出給系統(tǒng),需要在方法聲明中添加throws子句。其方法聲明的具體格式如下。一般的,如果一個方法引發(fā)了一個異常,而它自己又不處理,就要由其調(diào)用方法進(jìn)行處理。在子類中一個重寫的方法可能只拋出父類中聲明過的異?;蚱渥宇?。如果一個方法有完全相同的名稱和參數(shù),它只能拋出父類中聲明過得異?;蛘弋惓5淖宇?。Eg7.32024/12/24李飛——東北大學(xué)秦皇島分校計算中心14/22訪問權(quán)限修飾符
返回值類型
方法名(參數(shù)列表)throws異常列表異常的拋出用throw保留字主動拋出異常Java是通過異常拋出語句來實現(xiàn)主動拋出異常功能的。其語句格式是throw異常對象;Eg7.42024/12/24李飛——東北大學(xué)秦皇島分校計算中心15/22在使用throw語句拋出異常時需要注意的問題Throwable類的子類所創(chuàng)建的實例對象都可以用throw語句拋出。出異常是為了表明程序遇到錯誤無法正常執(zhí)行而需要異常處理。拋出異常的throw語句可以在try代碼段中,也可以在try代碼段中調(diào)用的方法中拋出異常。異常拋出后,它后面的代碼將不再執(zhí)行,也可以說異常地拋出終止了代碼段的正常執(zhí)行。2024/12/24李飛——東北大學(xué)秦皇島分校計算中心16/22異常拋出策略從方法使用者的角度,而不是書寫該方法的開發(fā)者角度來考慮,聲明對使用者有意義的異常。
何時拋出異?!谒O(shè)計的方法遇到不能處理的非正常情形下,應(yīng)當(dāng)聲明拋出異常。
不聲明所有可能發(fā)生的異常,要盡可能的將“低級異?!庇成涑蓪κ褂谜哂幸饬x的高級異常。不要聲明拋出“Exception”或“Throwable”,因為聲明拋出“超級異?!睂Ψ椒ㄊ褂谜邅碚f是毫無用處的,而且會導(dǎo)致極差的代碼風(fēng)格。一般不聲明拋出超過3個的異常,如果發(fā)生這種情況,也要通過代碼重構(gòu)或?qū)⒍鄠€異常映射到一個通用異常中來解決該問題,或者在方法內(nèi)部自行消化部分內(nèi)部異常。將異常組織成一個對象樹結(jié)構(gòu),有利于保持方法定義的穩(wěn)定性,同時也給方法的使用者提供了以不同粒度處理異常的自由。2024/12/24李飛——東北大學(xué)秦皇島分校計算中心17/227.3自定義異常
我們可以通過從Exception類或者它的子類派生一個子類,作為我們自定義的異常類。
在程序運(yùn)行時,發(fā)生了類似的問題時,程序員可以通過throw語句拋出自定義的異常類的實例,將其放到異常處理的隊列中,并激活Java的異常處理機(jī)制。2024/12/24李飛——東北大學(xué)秦皇島分校計算中心18/22例7.5自定義異常描述不可以輸入負(fù)數(shù)成績。importjava.util.Scanner;classmyExceptionextendsException{ publicmyException(Stringmsg){ super(msg); }}publicclasseg7_5{ publicstaticvoidmain(String[]args){ doublea;2024/12/24李飛——東北大學(xué)秦皇島分校計算中心19/22try{ a=inputScore(); System.out.println(a); }catch(myExceptione){ System.out.println(e.getMessage()); } System.out.println("程序結(jié)束"); } staticdoubleinputScore()throwsmyException{ doublescore=0; Scanners=newScanner(System.in); System.out.println("請輸入學(xué)生成績!");score=s.nextDouble(); if(score<0){ thrownewmyException("不能傳小于0的數(shù)"); } returnscore; }}2024/12/24李飛——東北大學(xué)秦皇島分校計算中心20/22小結(jié)異常處理機(jī)制包括:
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 財務(wù)風(fēng)險監(jiān)測與評估的工作重點計劃
- 加強(qiáng)人才培養(yǎng)機(jī)制的工作總結(jié)計劃
- 建建筑工程管理與實務(wù)課件新大綱
- 傳熱液行業(yè)相關(guān)投資計劃提議范本
- 內(nèi)鏡專用高頻電刀相關(guān)行業(yè)投資方案范本
- 課內(nèi)外結(jié)合的綜合活動計劃
- 醫(yī)院信息安全工作總結(jié)與防護(hù)措施計劃
- 如何組織班級戶外拓展活動計劃
- 車輛抵押借款合同三篇
- 《信息論與編碼新題》課件
- 鮮紅斑痣疾病演示課件
- 靜脈輸液操作課件
- 調(diào)酒師職業(yè)生涯規(guī)劃書
- 安全生產(chǎn)培訓(xùn)(完整版)課件
- 數(shù)字文化館運(yùn)營推廣策略
- 量子計算并行處理
- 國開2023秋《電子商務(wù)概論》實踐任務(wù)B2B電子商務(wù)網(wǎng)站調(diào)研報告參考答案
- AI技術(shù)在教育中的應(yīng)用:學(xué)校教育與教育機(jī)構(gòu)培訓(xùn)
- 聯(lián)邦學(xué)習(xí)部署
- 【瑞幸咖啡財務(wù)分析報告(附財務(wù)報表)5300字(論文)】
- 頜下間隙感染護(hù)理課件
評論
0/150
提交評論