

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第 6 章 Java 的異常處理學習目標:異常的基本概念 Throwable類及其子類運行時異常捕獲異常蘆明異常拋出異常自定義異常異常處理機制的優點使用異常處理機制的一些原則6. 1 異常的基本概念異常是在程序運行過程中發生的異常事件,比如除()溢出、數組越 界、文件找不到等,這些事件的發生將阻止程序的正常運行。程序設 計時,必須考慮到可能發生的異常事件并做出相應的處理。C語言中,通過使用if語句來判斷是否出現了異常并進行處理。但 是,這種錯誤處理機制會導致不少問題。例:main()int a,b,c;if(b!=O)c=a/b;elseprintf(“除數不能為0”);6 1異常的基本概念異
2、常處理機制在一個方法的運行過程中,如果發生了異常,則這個方法生成 代表該異常的一個對象.并把它交給運行時系統.運行時系統尋找 相應的代碼來處理這一異常。我們把生成異常對象并把它提交給運 行時系統的過程稱為拋出( )一個異常。運行時系統在方法的調 用棧中査找,從生成異常的方法開始進行回朔,直到找到包含相應 異常處理的方法為止,這一個過程稱為捕獲( )一個異常。生活中事件的處理機制在社會活動中,如果發生了火災、交通事故、遭竊、生病等突然 發生的異常事件,我們會打電話報警( )。城市中的各個部門中一 定會有一個來處理這個突發事件( )。6. 2 Throwable 類及其子類用面向對象的方法處理異常
3、,就必須建立類的層次。類Throwable位于這一類層次的最頂層,只有它的后代才可以作為一個異常被拋出。6. 2 Throwable類及其子類Error類對象(如動態鏈接錯誤等),由Java虛擬機生成并拋出。 通常,Java程序不對這類異常進行處理。Exception類對象是Java程序處理或拋出的對象。(1) RunTimeException類及其繼承類:java程序在運行時生成異 常,如被0除(ArithmeticException )、數組下標越界(ArraylndexOutOfBoundsException)等,其產生比較頻繁,處理麻 煩,對程序可讀性和運行效率影響太大。因此由系統檢測
4、,用戶可不做 處理,系統將它們交給缺省的異常處理程序(當然,必要時,用戶可對 其處理)。(2)除此( (RunTimeException)之外,其他的異常類:必須 被捕獲或被重新拋出,否則編譯會錯誤。6. 2 Throwable類及其子類C ArraylndexOutOfBoundsException(ExceptiCRunTimError 類ArithmeticExceptionrowable6 3運行時異常運行時異常是由Java運行時系統在程序的運行過程中檢測到的,它 可能在程序的任意部位發生,而且其數目可能很大,因此Java編譯器允 許程序不對它進行處理。這時,Java運行時系統會把生成
5、的運行時異常 對象交給缺省的異常處理程序,在標準輸出上顯示異常的內容以及發生 異常的位置。例:public class RuntimeExceptionExample public static voidmain( String args )int i=0;int r=4/i;運行結果為:C: java Runt imeExcept ionProcjava. lang. ArithmeticException: /by zeroat RuntimeExceptionProc. main(RuntimeExceptionProc java:4)6 4捕獲異常我們可以用try-catch-fina
6、lly語句來捕獲一個或多個異常, 語法結構如下:try可能產生異常的代碼段;catch(異常類名1對象名1)處理語句組catch(異常類名2對象名2)處理語句組2;finally最終處理語句;6. 4 捕獲異常1. try語句try語句用大括號指定了一段代碼, 該段代碼可能會拋出一個或多 個異常,同時,該段代碼也指定了它后面的catch語句所捕獲的異常的 范圍。例:tryint a=l, 2, 3, 4, 5;int sum=O:for(int i=0;i=5;i+)sum=sum+ai;System, out. print In (sum);6. 4 捕獲異常2.catch語句catch語句
7、的參數類似于方法的聲明,包括一個異常類型和一個異常 對象。異常類型必須為Throwable類的子類,它指明了catch語句所處理 的異常類型,異常對象則由運行時系統在try所指定的代碼塊中生成并被 捕獲,大括號中包含對象的處理,其中可以調用對象的方法。catch句可以有多個,分別處理不同類的異常。Javaig行時系統從 上到下分別對每個catch句處理的異常類型進行檢測,直到找到與類型 相匹配的catch句為止。這里,類型匹配指catch所處理的異常類型與 生成的異常對象的類型完全一致或者是它的父類,因此,catch語句的排 列順序應該是從特殊到一般(ExceptionExamplel.jav
8、a)o也可以用一個catch句處理多個異常類型,這時它的異常類型參數 應該是這多個異常類型的父類,程序設計中要根據具體的情況來選擇catch語句的異常處理類型(ExceptionExample2.java)。6 4 捕獲異常3. finally語句玻處垃圾6 4捕獲垃圾桶tryffitryffi限定的代碼中,當拋出一個異常時,其后的代碼不會被執行 。通過Hnally語句可以指定一塊代碼。無論try所指定的程序塊中拋出 或不拋出異常,也無論catch語句的異常類型是否與所拋出的異常的類 型一致,finally所指定的代碼都要被執行,它提供了統一的出口。通常在finally語句中可以進行資源的清除
9、工作。如關閉打開的文件 等。例子:ExceptionExample3 .java6.5聲明異常在方法中使用try-catch -f i n a I ly可以由這個方法來處理它所生 成的異常。在有些情況下,一個方法并不需要處理它所生成的異常,而是向上傳遞,由調用它的方法來處理這些異常,這時就要用到throws子句,它包含在方法的聲明中,其格式如下:returnType methodName( paramlist)exception List其中在ExceptionList中可以聲明多個異常,用逗號隔開。例:static void fun( int sei ) throwsArithmeticEx
10、ception, ArrayIndexOutOfBoundsException完整例子:ExceptionExample4. java在fun()方法中生成的異常通過調用棧傳遞給main。方法,由main()方法進行處理。注意:對非運行時異常,必須捕獲或聲明。6.6拋出異常在捕獲一個異常前,必須有一段Java代碼生成一個異常對象并把 它拋出。拋出異常的代碼可以是你的Java程序,或者是JDK中某個類, 或者是Java運行時系統。它們都是通過thro甬句來實現的。throw句的格式為:throw ThrowableObject;其中ThrowableObject必須為Throwable類或其子類
11、的對象。例如我們可以用throw new ArithmeticExcptionO;來拋出一個 算術異常(ExceptionExample5.java)。另外,我們還可以定義自己的異常類,并用throw語句來拋出它。6.7自定義異常創建用戶自定義異常的語法格式如下:class自定義異常extends父類異常名例:class MyException extends ExceptionMyExcept ion(Str i ng msg)super(msg);MyException()完整例子:Exception Example6. java6. 8異常處理機制的優點1.Java通過面向對象的方法進行
12、異常處理,把各種不同的異常事件進 行分類,體現了良好的層次性,提供了良好的接口,這種機制對于 具有動態運行特性的復雜程序提供了強有力的控制方式。2.Java的異常處理機制使得處理異常的代碼和“常規”代碼分開,減 少了代碼的數量,增強了程序的可讀性。(大家可以比較一下用if語句來處理異常的情形,這時需要進行一系列條件的判定)。3.Java的異常處理機制使得異常事件可以沿調用棧自動向上傳播,而 不是C語言中通過函數的返回值來傳播,這樣可以傳遞更多的信息 并且簡化代碼的編寫。4.由于把異常事件當成對象來處理,利用類的層次性我們可以把多個 具有相同父類的異常統一處理,也可以區分不同的異常分別處理, 使
13、用非常靈活。6. 8使用異常處理機制的一些原則1對非運行時異常必須捕獲或聲明,而對運行時異常則不必,可以交給Java運行時系統來處理。2對于自定義的異常類, 通常把它作為類Exception類,而不作為類Error的子類,因為Error類通常用于系統內嚴重的硬件錯誤。并且在 多數情況下,不要把自定義的異常類作為運行旳異常類RuntimeException子類。另外,自定義異常類的類名常常以Exception結尾。3.在捕獲或聲明異常時,要選取合適類型的異常類,注意異常的類層次, 根據不同的情況使用一般或特殊的異常類。4.根據具體的情況選擇在何處處理異常。是在方法內捕獲并處理呢?還 是用thro
14、ws子句把它交給調用棧中上層的方法去處理?生 使用finally語句為異常處理提供統一的出口。_ _6. 9實際應用程序功能將鍵盤輸入保存到文件中,要求只接收英文字母,如果輸入其他 字符,將文件自動刪除。目的:用于理解將業務代碼和異常處理分開的概念/ ExceptionExample70java import java.io.*;public class ExceptionExample7public static void main(String args) throws IOException Inputdata a = new Inputdata();trya.input();ycatc
15、h ( My Exception e)boolean flag;e.fout.close();File f=new File(,data.txtM); flag=f.delete();if(flag=true)System.out.println(lv成功刪除文件);elseSystem.out.println(lv刪除文件失敗”);/ My Exception, java import java.io.*; public class MyException extendsExceptionpublic MyException(FileOutputStream tout) this.fout=fout;public FileOutputStream tout;/Inputdata, java import java.io.*; public class Inputdatapu
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年銅陵市市直事業單位公開招聘工作人員統一筆試原始筆試歷年典型考題及考點剖析附帶答案詳解
- 政府保密合同范本(2篇)
- 2024-2025承包商入廠安全培訓考試試題及答案【基礎+提升】
- 2025廠級員工安全培訓考試試題答案完美版
- 2025公司級員工安全培訓考試試題B卷
- 2025版權許可合同范例
- 2025水果種子買賣合同協議書
- 阿莫西林可行性研究報告
- 2025網約車服務合同
- 2025年K12課外輔導項目建議書
- DL∕T 1709.3-2017 智能電網調度控制系統技術規范 第3部分:基礎平臺
- 考核辦法和考核方案
- 化妝品生產OEM合同書
- 海上CANTITRAVEL平臺樁基施工關鍵技術應用v7
- 2024年4月自考08229計算機統計分析方法試題
- 有色金屬冶金概論課程教案
- 華為MA5800配置及調試手冊
- 中國生產安全行業市場運行動態及投資發展潛力分析報告
- 【真題】2023年鎮江市中考化學試卷(含答案解析)
- 2023-2024年電子物證專業考試復習題庫(含答案)
- 安全生產培訓課件:機器設備安全操作規程
評論
0/150
提交評論