Java程序設計基礎 課件 第10章 異常處理_第1頁
Java程序設計基礎 課件 第10章 異常處理_第2頁
Java程序設計基礎 課件 第10章 異常處理_第3頁
Java程序設計基礎 課件 第10章 異常處理_第4頁
Java程序設計基礎 課件 第10章 異常處理_第5頁
已閱讀5頁,還剩43頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第10章異常處理1教學目標(1)理解異常處理的概念(2)掌握異常的類型,并能夠采用正確的方式進行定義(3)掌握對異常的處理,能夠進行異常捕獲并進行處理(4)掌握鏈式異常的創(chuàng)建(5)理解自定義異常的編寫2內(nèi)容310.1異常處理概述10.2異常的類型10.3聲明必檢異常10.4重新拋出異常10.5鏈式異常10.6自定義異常10.7異常新特性內(nèi)容410.1異常處理概述10.2異常的類型10.3聲明必檢異常10.4重新拋出異常10.5鏈式異常10.6自定義異常10.7異常新特性10.1異常處理概述5對于一個Java應用程序,該程序應能在正常情況下正確運行,這是對程序的基本要求。然而,程序在執(zhí)行時,也會碰到一些異常情況。例如,程序要求用戶打開一個指定位置的文件,但是這個文件因為某些原因被移動到其他位置或被刪除了。此時,JVM在執(zhí)行該程序時會檢測到該錯誤。如果程序員沒有對該錯誤進行處理,那么JVM會簡單地終止程序的執(zhí)行。如果程序員希望對該錯誤進行處理以使得程序繼續(xù)執(zhí)行或者給出某種具體詳細的提示信息再終止,那么程序員就需要使用Java語言提供的異常處理機制。10.1異常處理概述6在理想情況下,程序要求提供的數(shù)據(jù)應能正確提供,以確保程序的正確執(zhí)行。例如,程序要求輸入一個整數(shù),用戶應該輸入整數(shù),不能輸入英文字母或標點符號。又如,程序要求打開的文件是始終存在的。在程序?qū)嶋H使用時,總是可能會出現(xiàn)一些錯誤的情況。如果當程序要求輸入一個整數(shù),而用戶卻不小心輸入了一個英文字母,那么該程序在執(zhí)行時,就會出現(xiàn)運行時錯誤。JVM會檢測到這種錯誤并終止程序的執(zhí)行,這種運行時錯誤就是異常。如果異常沒有被程序員處理,那么程序?qū)蒍VM直接終止。Java語言提供異常處理機制讓程序員對異常進行處理以控制程序的繼續(xù)運行或優(yōu)雅終止(即給出友好詳細的相關提示信息后再終止)。710-1Java語言提供異常處理機制讓程序員對

[填空1]

進行處理以控制程序的

[填空2]

[填空3](即給出友好詳細的相關提示信息后再終止)。作答填空題3分10.1異常處理概述8示例:程序清單10-1LuckNumber.java要求用戶輸入一個0-9之間的整數(shù),然而沒有其他機制確保用戶輸入的是0-9之間的整數(shù)。10.1異常處理概述9如果程序員希望在程序執(zhí)行時出現(xiàn)異常后繼續(xù)執(zhí)行程序或者給出友好提示信息再終止程序,就需要對異常進行處理。示例:程序清單10-2LuckNumberExceptionHandle.javacatch塊的頭部catch(Exceptione)像一個帶參數(shù)的方法頭,Exception是參數(shù)類型,參數(shù)e可以在catch塊中使用。參數(shù)e稱為catch塊參數(shù)。10.1異常處理概述10在Java語言中,異常處理用到的關鍵字除了程序清單10-2中的try、catch,還有:finally、throw、throws,下面對這幾個關鍵字進行說明。(1)try--用于監(jiān)聽可能發(fā)生異常的代碼。將可能發(fā)生異常的代碼放在try塊中,當try塊內(nèi)發(fā)生異常時,異常就被拋出。(2)catch--用于捕獲和處理異常。catch用來捕獲try語句塊中發(fā)生的異常。catch塊類似于帶參數(shù)的方法定義,參數(shù)類型匹配拋出的異常。如果異常類型匹配,那么異常對象傳遞給catch塊參數(shù)。10.1異常處理概述11(3)throw—用在方法體中,拋出異常對象,但不進行異常處理。throw語句的基本語法形式是:throw異常對象;(4)throws--用在方法頭中,聲明該方法可能拋出的異常,方法自身無需處理這些異常。使用throws子句的基本的語法結(jié)構(gòu)是:[(修飾符)](返回值類型)(方法名)([參數(shù)列表])[throws異常類型1,異常類型2,…]{方法體}當方法可能會拋出某種異常時,用throws聲明可能拋出的異常。一個方法可能產(chǎn)生多個異常,因此,throws后可以接多個異常類型,多個異常類型之間用逗號分隔。10.1異常處理概述12throws示例:一個方法method1可能產(chǎn)生IOException、ArithmeticException,方法method1自身不處理這兩個異常,其方法頭可如下聲明:publicstaticvoidmethod1(inti)throwsIOException,ArithmeticException(5)finally—在異常處理中,無論有無異常出現(xiàn),只要出現(xiàn)了finally塊,finally塊的語句總是會被執(zhí)行的。finally塊中的代碼主要用于回收在try塊里打開的資源(如數(shù)據(jù)庫連接、網(wǎng)絡連接和磁盤文件等),確保打開的資源得到釋放。1310-2判斷正誤:throws關鍵字用于方法體中拋出異常對象,但不進行異常處理。這句話是否正確()正確錯誤AB提交單選題1分10.1異常處理概述14異常處理的基本流程:10.1異常處理概述15Java語言異常處理的完整形式是try-catch-finally形式,包括:try塊、catch塊、finally塊。try塊檢測有無異常發(fā)生catch塊捕獲和處理異常對象finally塊是可選的,一旦包含finally塊,無論有無異常發(fā)生,finally塊的代碼都要執(zhí)行。1610-3在方法執(zhí)行過程中出現(xiàn)異常時,

[填空1]

塊會捕獲并處理異常。作答填空題1分10.1異常處理概述17try-catch-finally形式也有幾種變化形式:1)無catch塊的try-finally形式:只有try塊和finally塊,try塊發(fā)生的異常由JVM默認處理。當try塊中出現(xiàn)異常時,finally塊的語句會執(zhí)行,而finally塊之后的語句不再執(zhí)行。示例:TestException1.java2)無finally塊的try-catch形式:如LuckNumberExceptionHandle.java3)多catch塊的try-catch形式或try-catch-finally:在一個try塊之后跟著多個catch塊,每個catch塊捕捉和處理一種類型的異常。try塊后面可根據(jù)需要添加任意數(shù)量catch塊,同一個異常類型對象不能被兩個不同的catch塊捕捉和處理。當try塊發(fā)生異常時,產(chǎn)生的異常依次和后續(xù)catch塊的異常類型進行匹配。示例:DivideWithException.java多個catch塊進行異常處理時,如果不同的catch塊捕捉和處理的異常類型具有父類-子類關系,這時,異常被指定的順序是很重要的。處理異常子類的catch塊應該放置在前面,處理異常父類的catch塊要放置在后面。如果catch塊的先后順序不對,就會產(chǎn)生編譯錯誤。示例:TestException2.java1810-4無catch塊的try-finally形式,什么情況執(zhí)行finally語句塊?()始終會執(zhí)行始終不執(zhí)行try塊發(fā)生異常時Try塊未發(fā)生異常時ABCD提交單選題1分此題未設置答案,請點擊右側(cè)設置按鈕1910-5右邊程序錯誤的地方()如果沒有catch模塊,就不能有try模塊。如果沒有catch模塊或finally模塊,就不能有try模塊。方法調(diào)用未出現(xiàn)異常,不能放在try模塊內(nèi)。沒有錯誤ABCD提交publicclassDemo{publicstaticvoidmain(String[]args){try{System.out.println("WelcometoJava");}}}單選題1分2010-6下面這句話是否正確:如果不同的catch塊捕捉和處理的異常類型具有父類-子類關系,這時異常被指定的順序是很重要的。處理異常父類的catch塊應該放置在前面,處理異常子類的catch塊要放置在后面。()正確錯誤AB提交單選題1分內(nèi)容2110.1異常處理概述10.2異常的類型10.3聲明必檢異常10.4重新拋出異常10.5鏈式異常10.6自定義異常10.7異常新特性10.2異常的類型22異常類的根類是Throwable,其父類是Object,其直接子類是Error和Exception。根據(jù)繼承體系,這些異常類可以分為兩大類:系統(tǒng)錯誤類-Error、異常-ExceptionException:運行時異常、非運行時異常

10.2異常的類型23異常類的根類是Throwable,其父類是Object,其直接子類是Error和Exception。根據(jù)繼承體系,這些異常類可以分為兩大類:系統(tǒng)錯誤類-Error:由Java虛擬機拋出,描述內(nèi)部系統(tǒng)錯誤。這類錯誤若發(fā)生,僅能通知用戶錯誤發(fā)生,不能做其他事。異常-Exception:描述程序和外部環(huán)境引起的錯誤,這些錯誤由程序捕獲和處理。Exception:運行時異常:RuntimeException及其子類,如ArithmeticException、ArrayIndexOutOfBoundsException非運行時異常:除RuntimeException及其子類以外的Exception子類10.2異常的類型24運行時異常非運行時異常異常描述ArithmeticException當出現(xiàn)異常的運算條件時,拋出此異常。例如,一個整數(shù)“除以零”時,拋出此類的一個實例。ArrayIndexOutOfBoundsException用非法索引訪問數(shù)組時拋出的異常。如果索引為負或大于等于數(shù)組大小,則該索引為非法索引。NullPointerException當應用程序試圖在需要對象的地方使用null時,拋出該異常。IllegalArgumentException拋出的異常表明向方法傳遞了一個不合法或不正確的參數(shù)。ClassCastException當試圖將對象強制轉(zhuǎn)換為不是實例的子類時,拋出該異常。ClassNotFoundException應用程序試圖加載類時,找不到相應的類,拋出該異常。IOException與輸入/輸出出現(xiàn)的錯誤有關,當打開一個不存在的文件或試圖越過文件尾讀取數(shù)據(jù)時,會產(chǎn)生此異常FileNotFoundException文件未找到異常2510-7下面哪個類的實例是描述如下一種程序錯誤,如類型轉(zhuǎn)換錯誤、訪問數(shù)組越界、數(shù)值錯誤等?()RuntimeExceptionExceptionErrorThrowableABCD提交單選題1分2610-8一個________實例描述了由程序和外部環(huán)境引起的錯誤。這些錯誤可以被程序捕獲和處理。RuntimeExceptionExceptionErrorThrowableABCD提交單選題1分10.2異常的類型27異??煞譃閮煞N類型:免檢異常(unckeckedexception):Error、RuntimeException以及它們的子類必檢異常(checkedexception):所有其他的異常類。必檢是指Java編譯器強制程序員對異常進行處理。免檢是指Java編譯器不強制程序員對異常進行處理。免檢異常反映的是程序設計上不可恢復的邏輯錯誤,如除數(shù)為0的算術異常ArithmeticException這些異常是程序需糾正的邏輯錯誤。免檢異??赡艹霈F(xiàn)在程序的任意位置,為避免過多地編寫異常處理代碼,Java不強制要求進行異常處理。內(nèi)容2810.1異常處理概述10.2異常的類型10.3聲明必檢異常10.4重新拋出異常10.5鏈式異常10.6自定義異常10.7異常新特性10.3聲明必檢異常29必檢異常除了使用try-catch塊進行處理之外,還可以通過在方法頭聲明必檢異常的形式進行處理。例如:publicvoidopenFile(Stringstr)throwsIOException,ClassCastException需要注意的是如果父類中的一個方法沒有聲明異常,那么該方法在子類中被重寫時就不能聲明異常。對于免檢異常,雖然也可以在方法頭中聲明,但是沒有必要。示例:程序清單10-4TestThrowsException.java3010-9如果父類中的一個方法沒有聲明異常,那么該方法在子類中被重寫時就

[填空1]

(能/不能)聲明異常。作答填空題1分內(nèi)容3110.1異常處理概述10.2異常的類型10.3聲明必檢異常10.4重新拋出異常10.5鏈式異常10.6自定義異常10.7異常新特性10.4重新拋出異常32如果一個catch塊捕獲了一個異常,不想處理它,或者只是希望調(diào)用它的方法注意到該異常,那么在catch塊可以重新拋出該異常。重新拋出異常的語法形式如下所示:語句throwex重新拋出異常給調(diào)用方法,調(diào)用方法可以決定如何處理異常ex。3310-10如果一個catch塊捕獲了一個異常,不想處理它,或者只是希望調(diào)用它的方法注意到該異常,那么在

[填空1]

塊可以重新拋出該異常。作答填空題1分內(nèi)容3410.1異常處理概述10.2異常的類型10.3聲明必檢異常10.4重新拋出異常10.5鏈式異常10.6自定義異常10.7異常新特性10.5鏈式異常3510.4節(jié)展示了在catch塊重新拋出原始異常時。當需要同原始異常一起拋出一個新異常(帶有附加信息)時,就產(chǎn)生了鏈式異常(chainedexception)。運行示例:程序清單10-5ChainedException.java內(nèi)容3610.1異常處理概述10.2異常的類型10.3聲明必檢異常10.4重新拋出異常10.5鏈式異常10.6自定義異常10.7異常新特性10.6自定義異常37有時,預定義異常類不能夠描述出現(xiàn)的錯誤。此時,程序員可以通過繼承Exception類及其子類來定義自己的異常類。例如,創(chuàng)建一個繼承Exception類的自定義異常類,如下所示:假定某個培訓單位,要求學員年齡在10-50之間,程序清單10-6:AgeException.java3810-11程序員可以通過繼承[填空1]類及其子類來定義自己的異常類作答填空題1分10.6自定義異常39Throwable類的方法列出了Throwable類的方法,自定義異常類也可以使用這些方法。10.6自定義異常Throwable類的printStackTrace()方法是一個非常重要的調(diào)試工具,它用于打印異?;蝈e誤的詳細追蹤信息到標準錯誤輸出流(通常是控制臺)。當程序中發(fā)生異常時,這個方法可以幫助開發(fā)者理解異常發(fā)生的上下文,即異常是在哪一行代碼處被拋出的,以及異常傳播的調(diào)用堆棧軌跡。堆棧跟蹤信息包括以下幾個部分:1.異常的類型和消息:顯示異常的全限定類名以及通過構(gòu)造函數(shù)傳遞的異常消息。2.異常發(fā)生的位置:顯示異常最初被拋出的代碼行號、所在的類名和方法名。3.調(diào)用序列:顯示導致異常的方法調(diào)用序列,從發(fā)生異常的方法開始向上直到main方法或JVM入口點,每一行顯示了方法名、類名、文件名和行號。這有助于復現(xiàn)異常發(fā)生時的執(zhí)行路徑。4010.6自定義異常Throwable類的toString()方法用于返回此throwable的簡短描述。這個描述通常包括異常的類型和異常消息(如果有)。具體來說,toString()方法的返回值通常是由異常類的名稱(帶包名)和異常的本地化消息(通過getMessage()方法獲得)組成,格式類似于:“類名:異常消息”。如果異常沒有詳細消息,返回的字符串可能只包含異常的類名。示例:TestExceptionInfo.java4110.6自定義異常42Exception類包含四個構(gòu)造方法,自定義異常類的構(gòu)造方法可以根據(jù)需要調(diào)用不同版本的父類構(gòu)造方法。10.6自定義異常43程序清單10

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論