王海燕
摘要:異常處理機(jī)制是計(jì)算機(jī)硬件或者是編程語(yǔ)言的的一種方法,是為了處理錯(cuò)誤信息而提供的一種功能,可以讓用戶更好的理解計(jì)算機(jī)硬件或者軟件中出現(xiàn)的錯(cuò)誤代碼,增強(qiáng)了代碼的可讀性,更便于程序員維護(hù)以及用戶去閱讀和理解。該文就C#中的異常處理機(jī)制進(jìn)行了介紹,并對(duì)C#中捕獲異常的方法和自定義異常進(jìn)行了分析,使C#程序員更快的理解異常處理方法,使程序的設(shè)計(jì)更高效、更健壯、更易于維護(hù)。
關(guān)鍵詞:C#;異常處理;異常類
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2015)15-0202-02
Abstract: The exception handling mechanism is a kind of method for computer hardware or programming language, a kind of function provided to deal with the wrong information, which can make the user better understand the error code appeared in the computer hardware or software, enhancing the readability of the code is easier for the programmer maintenance and user reading and understanding. The paper introduced the exception handling mechanism in C#, analyzed the method to catch the exception and custom exception in C#, in order to make C# programmer quicker understand the exception handling method, and make the program design more efficient and robust, and it is easier for maintenance.
Key words: C#; exception handling; exception class
程序在運(yùn)行過程中發(fā)生了錯(cuò)誤,就稱之為“異常”(Exception),它會(huì)帶來一些不可預(yù)知的問題。也許是程序崩潰或者是數(shù)據(jù)異常出錯(cuò),也可能是數(shù)據(jù)庫(kù)中的數(shù)據(jù)被錯(cuò)誤的修改,嚴(yán)重的可能會(huì)導(dǎo)致數(shù)據(jù)丟失、系統(tǒng)死機(jī)、系統(tǒng)程序損壞等。一般常見的程序設(shè)計(jì)語(yǔ)言都已經(jīng)提前設(shè)計(jì)好了異常處理模塊以便避免上述情況的發(fā)生。在程序中常用的異常一般有打開一個(gè)不存在的文件、訪問斷開連接的網(wǎng)絡(luò)、對(duì)象引用為空、數(shù)組下標(biāo)越界、算法溢出(超出數(shù)值表達(dá)范圍)、除數(shù)為零等等。當(dāng)發(fā)生異常時(shí),程序要能夠處理異常,使其繼續(xù)正常運(yùn)行。C#的異常處理機(jī)制簡(jiǎn)單、高效,通過結(jié)構(gòu)化和易控制的方式就能很容易的處理程序執(zhí)行時(shí)所發(fā)生的錯(cuò)誤,找出發(fā)生的原因,尋求解決方法。
1 C#和.NET中的異常處理
C#是微軟公司開發(fā)的一種面向?qū)ο蟮?、安全的、穩(wěn)定的、并且代碼簡(jiǎn)潔的高級(jí)程序設(shè)計(jì)語(yǔ)言,它運(yùn)行于.NET Framework之上,通過使用.NET中的大量類庫(kù)來進(jìn)行編程。在上述提到的各種情況發(fā)生的異常,在.NET中都是屬于對(duì)象,它們共有一個(gè)異常的基類,這個(gè)基類就是System.Exception。當(dāng)發(fā)生錯(cuò)誤時(shí),系統(tǒng)或當(dāng)前正在執(zhí)行的應(yīng)用程序通過引發(fā)包含關(guān)于該錯(cuò)誤的信息的異常來報(bào)告錯(cuò)誤。異常發(fā)生后,將由該應(yīng)用程序或默認(rèn)異常處理程序進(jìn)行處理。在C#中通過關(guān)鍵字throw在發(fā)生錯(cuò)誤的時(shí)候拋出相應(yīng)的異常。在外部程序調(diào)用方法中,主要是通過try...catch...finally這樣的結(jié)構(gòu)來獲取和處理相應(yīng)的異常。在這個(gè)結(jié)構(gòu)中,finally語(yǔ)段是可選的。那些可能會(huì)拋出需要處理的異常的程序代碼會(huì)放在try語(yǔ)段中,被稱之為試圖捕獲異常。而那些對(duì)于異常情況出現(xiàn)后進(jìn)行處理的代碼被放到了之后的catch語(yǔ)段中,它們被稱之為捕獲異常。在catch中,如果不帶參數(shù),將會(huì)捕獲所有的異常,如果帶參數(shù),則可以捕獲不同的異常來進(jìn)行特定的處理。對(duì)于程序中可能會(huì)出現(xiàn)的不同情況的異常,try語(yǔ)段可以使用多個(gè)catch加異常名來進(jìn)行特定的處理。在這個(gè)結(jié)構(gòu)中的finally語(yǔ)段通常放置程序必須要執(zhí)行的代碼,它不會(huì)受到程序中的異常處理的影響。在程序的正常執(zhí)行過程中,如果有異常發(fā)生了,try語(yǔ)段內(nèi)導(dǎo)致異常的程序代碼以及之后的代碼都不能被執(zhí)行,程序?qū)?huì)執(zhí)行有效的catch語(yǔ)段或者是finally語(yǔ)段內(nèi)的代碼。下面我們具體來看這個(gè)異常處理結(jié)構(gòu)。
2 通過使用try...catch...finally結(jié)構(gòu)來處理異常情況
首先,程序使用FileStream類定義了一個(gè)文件流fs并賦了一個(gè)空值,然后使用異常處理結(jié)構(gòu)來處理程序,首先在try語(yǔ)句段中指向C:\temp\filedata.txt文件,并使用FileMode.Open參數(shù)打開這個(gè)文件,如果文件不存在,將會(huì)引發(fā)異常。然后將文件以字節(jié)流的形式讀一行數(shù)據(jù)賦給變量line,最后在控制臺(tái)輸出這個(gè)變量。在catch語(yǔ)段中,使用FileNotFoundException(路徑不對(duì)或未找到文件)參數(shù)來捕獲異常,然后在控制臺(tái)輸出“[沒有找到所需的文件] C:\temp\filedata.txt”。對(duì)于finally語(yǔ)段來說是可選的,因?yàn)闊o(wú)論是否產(chǎn)生異常,它都會(huì)被執(zhí)行,在通常情況下,由于在try語(yǔ)段中的代碼執(zhí)行過程中,存在由于發(fā)生了異常情況因而導(dǎo)致程序申請(qǐng)的系統(tǒng)資源無(wú)法得到釋放的可能,所以就可以使用finally語(yǔ)段來釋放申請(qǐng)的資源。在這段程序代碼中,如果文件流不為空,最后將關(guān)閉當(dāng)前文件流并釋放與之關(guān)聯(lián)的所有資源,最后在控制臺(tái)輸出"資源釋放完畢!"。
3 用戶自定義異常
在C#程序中,可以允許自定義異常類型,用來表示用戶代碼在執(zhí)行過程中不希望發(fā)生的事件,并能為用戶提供更好的理解。由于C#中的異常是以類和對(duì)象方式來實(shí)現(xiàn)的,所以我們的自定義的異常類就需要繼承C#中異常的基類。在創(chuàng)建自己的異常類時(shí),通常的做法是以“Exception”這個(gè)詞作為用戶定義的異常類名來結(jié)尾。
好了,現(xiàn)在我們來看一個(gè)用戶自定義的異常類的基本結(jié)構(gòu)事例:
上面就是一個(gè)簡(jiǎn)單的用戶自定義的異常類,它首先繼承自基類Exception,其中有一個(gè)私有變量message用于顯示捕獲到錯(cuò)誤后的提示信息,這個(gè)例子中使用了兩個(gè)構(gòu)造函數(shù),其中無(wú)參的構(gòu)造函數(shù)用于直接顯示錯(cuò)誤信息,然后還有一個(gè)構(gòu)造函數(shù)的重載??梢栽诔绦蛟O(shè)計(jì)中對(duì)于已知的錯(cuò)誤直接捕獲后給出msg參數(shù),即一個(gè)直觀明了的提示信息。最后對(duì)ToString方法進(jìn)行重載,返回錯(cuò)誤信息。
以上我們主要探討了一些異常的基本概念,并分析了C#中的異常結(jié)構(gòu)的構(gòu)成以及工作原理,最后介紹了用戶自定義異常類的實(shí)現(xiàn)方法,通過這些方法,可以使用程序更好的做出合理的程序,避免一些程序中不可預(yù)知的或已知錯(cuò)誤的發(fā)生。
參考文獻(xiàn):
[1] 張聰品, 趙琛, 糜宏斌. 異常處理機(jī)制研究[J]. 計(jì)算機(jī)應(yīng)用研究, 2005(4).
[2] 閆大順, 姜淑娟, 席景科. 一種異常處理機(jī)制的設(shè)計(jì)與實(shí)現(xiàn)[J]. 計(jì)算機(jī)工程與設(shè)計(jì), 2006(24).
[3] 王方良, 湯文成. 基于C++異常處理機(jī)制的研究[J]. 計(jì)算機(jī)技術(shù)與發(fā)展, 2007(1).