第12章 異常處理_第1頁
第12章 異常處理_第2頁
第12章 異常處理_第3頁
第12章 異常處理_第4頁
第12章 異常處理_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、C#程序設計案例教程程序設計案例教程第第12章章 異常處理異常處理 第第12章章 異常處理異常處理 學習目標學習目標掌握異常的定義和處理。掌握異常的定義和處理。熟悉自定義異常的定義。熟悉自定義異常的定義。第第12章章 異常處理異常處理 12.1 異常異常【課堂案例課堂案例12-1】執(zhí)行下面的程序將出現(xiàn)異常執(zhí)行下面的程序將出現(xiàn)異常,請用異常處理請用異常處理機制修改程序。機制修改程序。Class ArrayOutOfIndex public void calculateSum() int sum = 0; int count ; int number = new int51,2,3,4,5; fo

2、r(count=1;count=5;count+) sum+=numbercount; Console.WriteLine(“The sum of the array is :0”,sum); Class Program static void Main(string args) ArrayOutOfIndex obj = new ArrayOutOfIndex(); obj.calculateSum(); 第第12章章 異常處理異常處理 課堂案例12-1運行時出現(xiàn)的異常第第12章章 異常處理異常處理 【案例學習目標案例學習目標】掌握異常的概念。掌握異常的概念。掌握異常的處理機制。掌握異常的處

3、理機制?!景咐R要點案例知識要點】異常的概念與處理機制。異常的概念與處理機制?!景咐瓿刹襟E案例完成步驟】(1)初步認識異常。)初步認識異常。(2)使用異常的處理機制。)使用異常的處理機制。(3)修改應用程序。)修改應用程序。第第12章章 異常處理異常處理 12.1.1 初步初步認識異常認識異常下面通過一段簡單代碼來認識異常。class Program static void Main(string args) int a,b,c; a=2; b=0; c=a/b; 按Ctrl+F5組合鍵執(zhí)行上述程序時,會彈出一個對話框,提示程序在執(zhí)行過程中碰到問題,出現(xiàn)的對話框如下圖所示:第第12章章 異

4、常處理異常處理 出現(xiàn)上述情況是因為程序遇到了異常,產生的異常類為System.DivideByZeroException,出現(xiàn)異常的原因是因為除數(shù)為0。異常是程序在執(zhí)行期間發(fā)生的錯誤情況。當程序發(fā)生異常時,系統(tǒng)就會拋出一個錯誤。異常類是對異常的分類。它們是由System.Exception類派生出來的,關于異常類的層次結構如下圖所示:System.ExceptionSystem.ApplicationExceptionSystem.SystemException第第12章章 異常處理異常處理 System.ApplicationException和System.SystemException是

5、System.Exception的直接子類,System.ApplicationException類是用戶類型異常,如果用戶想在程序中定義自己的異常,將要定義從該異常類繼承的異常。System.SystemException是所有預定義系統(tǒng)異常的基類。一些派生自System.SystemException類的常用基類如下表所示:類類說明說明System.IO.IOException發(fā)生發(fā)生I/O錯誤時引發(fā)的異常錯誤時引發(fā)的異常System.IndexOutOfRangeException試圖訪問索引超出數(shù)組界限的數(shù)組試圖訪問索引超出數(shù)組界限的數(shù)組元素時引發(fā)的異常。無法繼承此類元素時引發(fā)的異常。

6、無法繼承此類System.NullReferenceException嘗試取消引用空對象引用時引發(fā)的嘗試取消引用空對象引用時引發(fā)的異常異常System.OutOfMemoryException沒有足夠的內存繼續(xù)執(zhí)行程序時引沒有足夠的內存繼續(xù)執(zhí)行程序時引發(fā)的異常發(fā)的異常第第12章章 異常處理異常處理 l 程序錯誤的分類根據錯誤出現(xiàn)的階段,通??梢詫⒊绦蝈e誤分為如下三種:編譯時錯誤、結果錯誤和運行時錯誤。(1)編譯時錯誤:這種錯誤是發(fā)生在程序編寫過程中,是指程序語法編寫上出現(xiàn)的錯誤。(2)結果錯誤:結果錯誤指的是程序本身沒有語法上的錯誤(即無編譯錯誤),在程序運行期間也沒有出現(xiàn)類似上圖的錯誤提示。

7、但程序執(zhí)行后得到的結果并不正確。這是由于程序設計思路上存在的缺陷,是程序算法在實現(xiàn)功能時出現(xiàn)的邏輯上的問題。(3)運行時錯誤:是指編譯已通過,運行時發(fā)生的錯誤。運行時錯誤時由于與用戶交互或對外設或網絡的訪問等可變情況,程序設計時考慮欠周全而導致的。第第12章章 異常處理異常處理 12.1.2 異常異常的處理機制的處理機制在C#中是通過try、catch和finally塊來實現(xiàn)異常處理的。1. try程序塊用戶需要將可能導致異常的語句放入try程序塊中。try程序塊的使用方法如下:try /可能導致異常的語句try程序塊管理放入其中的語句,并定義相關的異常處理程序的范圍。換句話說,如果異常發(fā)生在

8、try程序塊內,與try程序塊相關的異常處理程序將處理該異常。ty程序塊必須緊跟至少一個catch程序塊。第第12章章 異常處理異常處理 2. catch程序塊通過在try程序塊后緊跟一個或多個catch處理程序可以將異常處理程序和try程序塊關聯(lián)起來。下列代碼框架說明了catch程序塊的使用。try /可能導致異常的語句catch() /異常處理代碼catch語句將異常類的對象作為參數(shù)。如果異常發(fā)生了,就執(zhí)行catch程序塊中的語句。catch程序塊的處理范圍僅限于先前try程序塊中的相關語句。第第12章章 異常處理異常處理 3. finally程序塊finally用于執(zhí)行不論異常是否被拋出

9、都會被執(zhí)行的一個語句塊。例如,在實現(xiàn)文件操作的過程中不管有沒有異常,文件必須被關閉,文件被關閉的操作可放置在finally塊中。try /可能導致異常的語句catch() /異常處理代碼finally /最后的執(zhí)行代碼finally程序塊跟在catch程序塊后面。對于一個異常處理程序,只能有一個finally程序塊。但是,并不是一定要使用finally程序塊。第第12章章 異常處理異常處理 對于課堂案例12-1,要處理程序運行過程中出現(xiàn)的System.OutOfMemoryException異常,需要使用trycatch程序塊。處理代碼如下:try /捕獲異常 for(count=1;coun

10、t=5;count+) sum += numbercount; Console.WriteLine(“The sum of the array is :0”,sum);catch(IndexOutOfRangeException e) Console.WriteLine(e.Message);說明:說明:(1)在)在trycatch結構中,結構中,catch語句塊可以有多個,讀者可以根據情況而定,但至少要有一個語句塊可以有多個,讀者可以根據情況而定,但至少要有一個catch語句塊。語句塊。(2)catch語句,按異常類型從深層派生異常類型到異?;愋停◤奶厥獾揭话悖┑捻樞蚺帕?。若顛倒順序則語句

11、,按異常類型從深層派生異常類型到異?;愋停◤奶厥獾揭话悖┑捻樞蚺帕小H纛嵉鬼樞騽t參數(shù)為異?;愵愋偷膮?shù)為異常基類類型的catch語句將截獲所有語句將截獲所有try語句拋出的異常對象。語句拋出的異常對象。(3)在)在C#中處理異常時,當不能明確系統(tǒng)異常時,可以直接使用中處理異常時,當不能明確系統(tǒng)異常時,可以直接使用System.Exception類。類。第第12章章 異常處理異常處理 12.1.3 修改應用程序修改應用程序 對對課堂案例課堂案例12-1的錯誤程序進行異常處理后的完整代碼的錯誤程序進行異常處理后的完整代碼如下:如下:Class ArrayOutOfIndex public vo

12、id calculateSum() int sum=0; int count; int number =new int5 1,2,3,4,5; try /捕獲異常 for(count=1;count=5;count+) sum += numbercount; Console.WriteLine(“The sum of the array is : 0”,sum); catch(IndexOutOfRangeException e) Console.WriteLine(e.Message); Class Program static void Main(string args) ArrayOut

13、OfIndex obj = new ArrayOutOfIndex(); obj.calculateSum(); 第第12章章 異常處理異常處理 課堂實踐課堂實踐12-1修改下面的程序,使程序能夠正常結束。修改下面的程序,使程序能夠正常結束。using System;class ExceptionExam public static void Main() int nums1 = 22,23,24,25,26; int nums2 = 2,0,4,0; for(int i=0;inums1.Length;i+) Console.WriteLine(nums1i/nums2); 第第12章章 異

14、常處理異常處理 12.2 自定義異常自定義異常【課堂案例課堂案例12-2】閱讀下面的程序,識別用到的異常并預測程序的輸閱讀下面的程序,識別用到的異常并預測程序的輸出結果。出結果。/定義用戶自定義異常定義用戶自定義異常Public class CountIsZeroException:ApplicationException public CountIsZeroException (string message):base(message) Public class Calculate int sum; int count; int average; public int Sum get ret

15、urn sum; set sum=value; public int Count get return count; set count =value; public void doAverage() if(0=count) throw(new CountIsZeroException(“除數(shù)是除數(shù)是0”); else average=sum/count; 第第12章章 異常處理異常處理 Class Program static void Main(string args) Calculate obj = new Calculate(); try obj.Sum=0; obj.Count=0;

16、 obj.doAverage(); catch(CountIsZeroException e) Console.WriteLine(“CountIsZeroException:0”,e.Message); 第第12章章 異常處理異常處理 【案例學習目標案例學習目標】掌握自定義異常的使用。掌握自定義異常的使用?!景咐R要點案例知識要點】自定義異常。自定義異常。【案例完成步驟案例完成步驟】(1)初步認識用戶自定義異常。)初步認識用戶自定義異常。(2)預測程序的輸出結果。)預測程序的輸出結果。第第12章章 異常處理異常處理 12.2.1 初次初次認識用戶自定義異常類認識用戶自定義異常類 1.定義用

17、戶自定義異常定義用戶自定義異常.NET框架為程序人員提供了大量的預定義異常類,一些常見錯誤引發(fā)的異常都能被預定義的異常類捕捉。然后,在實際的程序設計過程中,編程人員可能需要根據程序運行的具體情況,人為地創(chuàng)建自己的異常類來處理某些特殊狀況,這種類型的異常稱為自定義異常。自定義異常類派生自ApplicationException類。要創(chuàng)建用戶自定義的異常,必須首先聲明它,聲明的格式為: class 自定義異常名:ApplicationException 第第12章章 異常處理異常處理 例如:聲明一個自定義異常MyException:Class MyException:ApplicationExce

18、ption /自定義異常通常繼承 ApplicationException異常類 public MyException() : base() public MyException(string e) : base(e) public MyException(string e,Exception inner) : base(e,inner) 第第12章章 異常處理異常處理 2.拋出異常拋出異常在完成自定義異常類定義的基礎上,我們需要進一步明確在程序運行到何處時,適時地拋出異常對象。在C#中使用throw關鍵字實現(xiàn)拋出異常的處理機制,稱為“自定義異常處理機制”。具體的使用格式如下:throw 表達式;例如,拋出上面定義

溫馨提示

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

評論

0/150

提交評論