C程序設(shè)計(jì)教程第7章_第1頁(yè)
C程序設(shè)計(jì)教程第7章_第2頁(yè)
C程序設(shè)計(jì)教程第7章_第3頁(yè)
C程序設(shè)計(jì)教程第7章_第4頁(yè)
C程序設(shè)計(jì)教程第7章_第5頁(yè)
已閱讀5頁(yè),還剩22頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、2021-10-251第七章第七章 程序調(diào)試與異常處理 1. 總體要求總體要求l了解程序錯(cuò)誤的了解程序錯(cuò)誤的3種類型。種類型。l熟練運(yùn)用熟練運(yùn)用visual studio .net 2010的調(diào)試器調(diào)試程序錯(cuò)誤。的調(diào)試器調(diào)試程序錯(cuò)誤。l解異常和異常處理的概念。解異常和異常處理的概念。l學(xué)會(huì)使用學(xué)會(huì)使用try-catch-finally及及throw語(yǔ)句來(lái)捕獲和處理異常。語(yǔ)句來(lái)捕獲和處理異常。2. 學(xué)習(xí)重點(diǎn)學(xué)習(xí)重點(diǎn)l調(diào)試程序錯(cuò)誤的方法。調(diào)試程序錯(cuò)誤的方法。ly-catch-finally結(jié)構(gòu)及其使用方法。結(jié)構(gòu)及其使用方法。第七章第七章 程序調(diào)試與異常處理7.1 程序錯(cuò)誤程序錯(cuò)誤l7.1.1 程序

2、錯(cuò)誤分類程序錯(cuò)誤分類l7.1.2 調(diào)試程序錯(cuò)誤調(diào)試程序錯(cuò)誤 7.1.1 程序錯(cuò)誤分類程序錯(cuò)誤分類l在編寫(xiě)程序時(shí),我們經(jīng)常會(huì)遇到各種各樣的錯(cuò)誤,這些錯(cuò)在編寫(xiě)程序時(shí),我們經(jīng)常會(huì)遇到各種各樣的錯(cuò)誤,這些錯(cuò)誤中有些容易發(fā)現(xiàn)和解決,有些則比較隱蔽甚至很難發(fā)現(xiàn)誤中有些容易發(fā)現(xiàn)和解決,有些則比較隱蔽甚至很難發(fā)現(xiàn)。c#程序錯(cuò)誤總體上可以歸納為程序錯(cuò)誤總體上可以歸納為3類:語(yǔ)法錯(cuò)誤、邏輯錯(cuò)類:語(yǔ)法錯(cuò)誤、邏輯錯(cuò)誤和運(yùn)行時(shí)錯(cuò)誤。誤和運(yùn)行時(shí)錯(cuò)誤。l1語(yǔ)法錯(cuò)誤語(yǔ)法錯(cuò)誤l語(yǔ)法錯(cuò)誤是指不符合語(yǔ)法錯(cuò)誤是指不符合c#語(yǔ)法規(guī)則的程序錯(cuò)誤。例如,變量語(yǔ)法規(guī)則的程序錯(cuò)誤。例如,變量名的拼寫(xiě)錯(cuò)誤、數(shù)據(jù)類型錯(cuò)誤、標(biāo)點(diǎn)符號(hào)的丟失、括號(hào)不名

3、的拼寫(xiě)錯(cuò)誤、數(shù)據(jù)類型錯(cuò)誤、標(biāo)點(diǎn)符號(hào)的丟失、括號(hào)不匹配等。語(yǔ)法錯(cuò)誤是匹配等。語(yǔ)法錯(cuò)誤是3類程序錯(cuò)誤中最容易發(fā)現(xiàn)也是最容易類程序錯(cuò)誤中最容易發(fā)現(xiàn)也是最容易解決的一類錯(cuò)誤,發(fā)生在源代碼的編寫(xiě)過(guò)程中。在解決的一類錯(cuò)誤,發(fā)生在源代碼的編寫(xiě)過(guò)程中。在visual studio .net 2010中,源代碼編輯器能自動(dòng)識(shí)別語(yǔ)法錯(cuò)誤中,源代碼編輯器能自動(dòng)識(shí)別語(yǔ)法錯(cuò)誤,并用紅色波浪線標(biāo)記錯(cuò)誤。只要將鼠標(biāo)停留在帶有此標(biāo),并用紅色波浪線標(biāo)記錯(cuò)誤。只要將鼠標(biāo)停留在帶有此標(biāo)記的代碼上,就會(huì)顯示出其錯(cuò)誤信息,同時(shí)顯示在錯(cuò)誤列記的代碼上,就會(huì)顯示出其錯(cuò)誤信息,同時(shí)顯示在錯(cuò)誤列表窗口中。表窗口中。 7.1.1 程序錯(cuò)誤分類程

4、序錯(cuò)誤分類l如圖如圖7-1所示,語(yǔ)句應(yīng)該以英文分號(hào)結(jié)尾,而不是以中文分所示,語(yǔ)句應(yīng)該以英文分號(hào)結(jié)尾,而不是以中文分號(hào)結(jié)尾。號(hào)結(jié)尾。7.1.1 程序錯(cuò)誤分類程序錯(cuò)誤分類l其實(shí),語(yǔ)法錯(cuò)誤是可以避免的。其實(shí),語(yǔ)法錯(cuò)誤是可以避免的。visual studio .net 2010提供了強(qiáng)大的智能感知技術(shù),要盡量利用該技術(shù)輔助書(shū)寫(xiě)提供了強(qiáng)大的智能感知技術(shù),要盡量利用該技術(shù)輔助書(shū)寫(xiě)源程序,不但可提高錄入速度,還可以避免語(yǔ)法錯(cuò)誤。如源程序,不但可提高錄入速度,還可以避免語(yǔ)法錯(cuò)誤。如圖圖7-2所示,當(dāng)輸入了所示,當(dāng)輸入了“convert.”時(shí),系統(tǒng)會(huì)自動(dòng)顯示時(shí),系統(tǒng)會(huì)自動(dòng)顯示convert類的所有成員方法,通過(guò)

5、光標(biāo)移動(dòng)鍵查找并定位類的所有成員方法,通過(guò)光標(biāo)移動(dòng)鍵查找并定位于某個(gè)方法,按空格鍵,即可完成相關(guān)諸如于某個(gè)方法,按空格鍵,即可完成相關(guān)諸如“convert.todatetime”之類的錄入操作。之類的錄入操作。7.1.1 程序錯(cuò)誤分類程序錯(cuò)誤分類l2邏輯錯(cuò)誤邏輯錯(cuò)誤l邏輯錯(cuò)誤通常不會(huì)引起程序本身的運(yùn)行異常。因?yàn)榉治龊瓦壿嬪e(cuò)誤通常不會(huì)引起程序本身的運(yùn)行異常。因?yàn)榉治龊驮O(shè)計(jì)不充分,造成程序算法有缺陷或完全錯(cuò)誤,這樣根據(jù)設(shè)計(jì)不充分,造成程序算法有缺陷或完全錯(cuò)誤,這樣根據(jù)錯(cuò)誤的算法書(shū)寫(xiě)程序,自然不會(huì)獲得預(yù)期的運(yùn)行結(jié)果。因錯(cuò)誤的算法書(shū)寫(xiě)程序,自然不會(huì)獲得預(yù)期的運(yùn)行結(jié)果。因此邏輯錯(cuò)誤的實(shí)質(zhì)是算法錯(cuò)誤,是最

6、不容易發(fā)現(xiàn)的,也是此邏輯錯(cuò)誤的實(shí)質(zhì)是算法錯(cuò)誤,是最不容易發(fā)現(xiàn)的,也是最難解決的,必須重新檢查程序的流程是否正確以及算法最難解決的,必須重新檢查程序的流程是否正確以及算法是否與要求相符,有時(shí)可能需要逐步地調(diào)試分析,甚至還是否與要求相符,有時(shí)可能需要逐步地調(diào)試分析,甚至還要適當(dāng)?shù)靥砑訉iT的調(diào)試分析代碼來(lái)查找其出錯(cuò)的原因和要適當(dāng)?shù)靥砑訉iT的調(diào)試分析代碼來(lái)查找其出錯(cuò)的原因和位置。位置。l邏輯錯(cuò)誤無(wú)法依靠邏輯錯(cuò)誤無(wú)法依靠.net編譯器進(jìn)行檢查,只有依靠程序設(shè)編譯器進(jìn)行檢查,只有依靠程序設(shè)計(jì)員認(rèn)真、不懈的努力才能解決。正因如此,尋找新算法計(jì)員認(rèn)真、不懈的努力才能解決。正因如此,尋找新算法、排除邏輯錯(cuò)誤才是

7、廣大程序設(shè)計(jì)員的價(jià)值所在。、排除邏輯錯(cuò)誤才是廣大程序設(shè)計(jì)員的價(jià)值所在。7.1.1 程序錯(cuò)誤分類程序錯(cuò)誤分類l3運(yùn)行時(shí)錯(cuò)誤運(yùn)行時(shí)錯(cuò)誤l運(yùn)行時(shí)錯(cuò)誤是指在應(yīng)用程序試圖執(zhí)行系統(tǒng)無(wú)法執(zhí)行的操作運(yùn)行時(shí)錯(cuò)誤是指在應(yīng)用程序試圖執(zhí)行系統(tǒng)無(wú)法執(zhí)行的操作時(shí)產(chǎn)生的錯(cuò)誤,也就是我們所說(shuō)的系統(tǒng)報(bào)錯(cuò)。這類錯(cuò)誤編時(shí)產(chǎn)生的錯(cuò)誤,也就是我們所說(shuō)的系統(tǒng)報(bào)錯(cuò)。這類錯(cuò)誤編譯器是無(wú)法自動(dòng)檢查出來(lái)的,通常需要對(duì)輸入的代碼進(jìn)行譯器是無(wú)法自動(dòng)檢查出來(lái)的,通常需要對(duì)輸入的代碼進(jìn)行手動(dòng)檢查并更正。手動(dòng)檢查并更正。l【實(shí)例【實(shí)例7-1】設(shè)計(jì)一個(gè)】設(shè)計(jì)一個(gè)windows程序,求每隔程序,求每隔3個(gè)位置上的個(gè)位置上的2個(gè)數(shù)組元素之和,并保存在前一元素中

8、個(gè)數(shù)組元素之和,并保存在前一元素中7.1.2 調(diào)試程序錯(cuò)誤調(diào)試程序錯(cuò)誤 l1visual studio .net 2010的調(diào)試方式的調(diào)試方式lvisual studio .net 2010提供多種調(diào)試方式,包括逐語(yǔ)句提供多種調(diào)試方式,包括逐語(yǔ)句方式、逐過(guò)程方式和斷點(diǎn)方式等。方式、逐過(guò)程方式和斷點(diǎn)方式等。l其中,逐語(yǔ)句方式和逐過(guò)程方式都是逐行執(zhí)行程序代碼,其中,逐語(yǔ)句方式和逐過(guò)程方式都是逐行執(zhí)行程序代碼,所不同的是,當(dāng)遇到方法調(diào)用時(shí),前者將進(jìn)入方法體內(nèi)繼所不同的是,當(dāng)遇到方法調(diào)用時(shí),前者將進(jìn)入方法體內(nèi)繼續(xù)逐行執(zhí)行,而后者不會(huì)進(jìn)入方法體內(nèi)跟蹤方法本身的代續(xù)逐行執(zhí)行,而后者不會(huì)進(jìn)入方法體內(nèi)跟蹤方法

9、本身的代碼。所以如果在調(diào)試的過(guò)程中想避免執(zhí)行方法體內(nèi)的代碼碼。所以如果在調(diào)試的過(guò)程中想避免執(zhí)行方法體內(nèi)的代碼,就可以使用逐過(guò)程方式;相反,如果想查看方法體代碼,就可以使用逐過(guò)程方式;相反,如果想查看方法體代碼是否出錯(cuò),就得使用逐語(yǔ)句方式。是否出錯(cuò),就得使用逐語(yǔ)句方式。l在在visual studio .net 2010中,選擇中,選擇“調(diào)試調(diào)試”菜單的菜單的“逐逐語(yǔ)句語(yǔ)句”命令(如圖命令(如圖7-4所示)或者按所示)或者按,可啟用逐語(yǔ)句,可啟用逐語(yǔ)句方式,連續(xù)按方式,連續(xù)按可跟蹤每一條語(yǔ)句的執(zhí)行。而選擇可跟蹤每一條語(yǔ)句的執(zhí)行。而選擇“調(diào)試調(diào)試”菜單的菜單的“逐過(guò)程逐過(guò)程”命令或者按命令或者按,

10、可啟用逐過(guò),可啟用逐過(guò)程方式。程方式。7.1.2 調(diào)試程序錯(cuò)誤調(diào)試程序錯(cuò)誤l2visual studio .net 2010的斷點(diǎn)方式的斷點(diǎn)方式l通過(guò)逐行執(zhí)行程序來(lái)尋找錯(cuò)誤,效果確實(shí)很棒。但是,對(duì)通過(guò)逐行執(zhí)行程序來(lái)尋找錯(cuò)誤,效果確實(shí)很棒。但是,對(duì)于較大規(guī)模的程序或者已經(jīng)知道錯(cuò)誤范圍的程序,使用逐于較大規(guī)模的程序或者已經(jīng)知道錯(cuò)誤范圍的程序,使用逐語(yǔ)句方式或逐過(guò)程方式,都是沒(méi)有必要的。為此,可使用語(yǔ)句方式或逐過(guò)程方式,都是沒(méi)有必要的。為此,可使用斷點(diǎn)方式調(diào)試程序。斷點(diǎn)方式調(diào)試程序。l斷點(diǎn)是一個(gè)標(biāo)志,它通知調(diào)試器應(yīng)該在某處中斷應(yīng)用程序斷點(diǎn)是一個(gè)標(biāo)志,它通知調(diào)試器應(yīng)該在某處中斷應(yīng)用程序并暫停執(zhí)行。與逐

11、行執(zhí)行不同的是,斷點(diǎn)方式可以讓程序并暫停執(zhí)行。與逐行執(zhí)行不同的是,斷點(diǎn)方式可以讓程序一直執(zhí)行,直到遇到斷點(diǎn)才開(kāi)始調(diào)試。顯然,這將大大加一直執(zhí)行,直到遇到斷點(diǎn)才開(kāi)始調(diào)試。顯然,這將大大加快調(diào)試過(guò)程??煺{(diào)試過(guò)程。visual studio .net 2010允許在源程序中設(shè)允許在源程序中設(shè)置多個(gè)斷點(diǎn)。置多個(gè)斷點(diǎn)。7.1.2 調(diào)試程序錯(cuò)誤調(diào)試程序錯(cuò)誤l設(shè)置斷點(diǎn)的操作方法如下:設(shè)置斷點(diǎn)的操作方法如下:l右擊想要設(shè)置斷點(diǎn)的代碼行,選擇右擊想要設(shè)置斷點(diǎn)的代碼行,選擇“斷點(diǎn)斷點(diǎn)插入斷點(diǎn)插入斷點(diǎn)”命命令即可;也可以單擊源代碼行左邊的灰色區(qū)域;或者將插令即可;也可以單擊源代碼行左邊的灰色區(qū)域;或者將插入點(diǎn)定位于

12、想以設(shè)置斷點(diǎn)的代碼行,再按入點(diǎn)定位于想以設(shè)置斷點(diǎn)的代碼行,再按。如圖。如圖7-6所示,斷點(diǎn)以紅色圓點(diǎn)表示,并且該行代碼也高亮顯示。所示,斷點(diǎn)以紅色圓點(diǎn)表示,并且該行代碼也高亮顯示。7.1.2 調(diào)試程序錯(cuò)誤調(diào)試程序錯(cuò)誤l3人工尋找邏輯錯(cuò)誤人工尋找邏輯錯(cuò)誤l在眾多的程序錯(cuò)誤中,有些錯(cuò)誤是很難發(fā)現(xiàn)的,尤其是邏在眾多的程序錯(cuò)誤中,有些錯(cuò)誤是很難發(fā)現(xiàn)的,尤其是邏輯錯(cuò)誤,即便是功能強(qiáng)大的調(diào)試器也顯得無(wú)能為力。這時(shí)輯錯(cuò)誤,即便是功能強(qiáng)大的調(diào)試器也顯得無(wú)能為力。這時(shí)可以適當(dāng)?shù)丶尤胍恍┤斯げ僮?,以便快速地找到錯(cuò)誤。??梢赃m當(dāng)?shù)丶尤胍恍┤斯げ僮?,以便快速地找到錯(cuò)誤。常見(jiàn)的方法有兩種:見(jiàn)的方法有兩種:l(1)注釋可

13、能出錯(cuò)的代碼。這是一種比較有效的尋找錯(cuò)誤)注釋可能出錯(cuò)的代碼。這是一種比較有效的尋找錯(cuò)誤的策略。如果注釋掉部分代碼后,程序就能正常運(yùn)行,那的策略。如果注釋掉部分代碼后,程序就能正常運(yùn)行,那么就能肯定該代碼出錯(cuò)了;反之,錯(cuò)誤應(yīng)該在別處。么就能肯定該代碼出錯(cuò)了;反之,錯(cuò)誤應(yīng)該在別處。l(2)適當(dāng)?shù)靥砑右恍┹敵稣Z(yǔ)句,再觀察是否成功顯示輸出)適當(dāng)?shù)靥砑右恍┹敵稣Z(yǔ)句,再觀察是否成功顯示輸出信息,即可判斷包含該輸出語(yǔ)句的分支和循環(huán)結(jié)構(gòu)是否有信息,即可判斷包含該輸出語(yǔ)句的分支和循環(huán)結(jié)構(gòu)是否有邏輯錯(cuò)誤,從而進(jìn)一步分析錯(cuò)誤的原因。邏輯錯(cuò)誤,從而進(jìn)一步分析錯(cuò)誤的原因。 7.2 程序的異常處理程序的異常處理l7.2

14、.1 異常的概念異常的概念 l7.2.2 try-catch語(yǔ)句與異常處理語(yǔ)句與異常處理 l7.2.3 finally語(yǔ)句語(yǔ)句l7.2.4 throw語(yǔ)句與拋出異常語(yǔ)句與拋出異常7.2.1 異常的概念異常的概念 l一個(gè)優(yōu)秀的程序員在編寫(xiě)程序時(shí),不僅要關(guān)心代碼正常的一個(gè)優(yōu)秀的程序員在編寫(xiě)程序時(shí),不僅要關(guān)心代碼正常的控制流程,同時(shí)也要把握好系統(tǒng)可能隨時(shí)發(fā)生的不可預(yù)期控制流程,同時(shí)也要把握好系統(tǒng)可能隨時(shí)發(fā)生的不可預(yù)期的事件。它們可能來(lái)自系統(tǒng)本身,如內(nèi)存不夠、磁盤出錯(cuò)的事件。它們可能來(lái)自系統(tǒng)本身,如內(nèi)存不夠、磁盤出錯(cuò)、網(wǎng)絡(luò)連接中斷、數(shù)據(jù)庫(kù)無(wú)法使用等;也可能來(lái)自用戶,、網(wǎng)絡(luò)連接中斷、數(shù)據(jù)庫(kù)無(wú)法使用等;也

15、可能來(lái)自用戶,如非法輸入等,一旦發(fā)生這些事件,程序都將無(wú)法正常運(yùn)如非法輸入等,一旦發(fā)生這些事件,程序都將無(wú)法正常運(yùn)行。行。l所謂異常就是那些能影響程序正常執(zhí)行的事件,而對(duì)這些所謂異常就是那些能影響程序正常執(zhí)行的事件,而對(duì)這些事件的處理方法稱為異常處理。異常處理是必不可少的,事件的處理方法稱為異常處理。異常處理是必不可少的,它可以防止程序處于非正常狀態(tài),并可根據(jù)不同類型的錯(cuò)它可以防止程序處于非正常狀態(tài),并可根據(jù)不同類型的錯(cuò)誤來(lái)執(zhí)行不同的處理方法。誤來(lái)執(zhí)行不同的處理方法。7.2.1 異常的概念異常的概念l【實(shí)例【實(shí)例7-2】設(shè)計(jì)一個(gè)】設(shè)計(jì)一個(gè)windows程序,首先,使用程序,首先,使用textb

16、ox控件構(gòu)建單價(jià)和數(shù)量的操作界面,然后編程計(jì)算控件構(gòu)建單價(jià)和數(shù)量的操作界面,然后編程計(jì)算金額。金額。l在本例中,造成異常的原因是:在本例中,造成異常的原因是:textbox控件本身不具備控件本身不具備限制用戶輸入的功能,設(shè)計(jì)人員又按常規(guī)進(jìn)行設(shè)計(jì),但當(dāng)限制用戶輸入的功能,設(shè)計(jì)人員又按常規(guī)進(jìn)行設(shè)計(jì),但當(dāng)用戶不按常規(guī)輸入數(shù)據(jù)時(shí),系統(tǒng)自然發(fā)生異常。用戶不按常規(guī)輸入數(shù)據(jù)時(shí),系統(tǒng)自然發(fā)生異常。l所以,如果不想讓程序因出現(xiàn)異常而被系統(tǒng)中斷或退出的所以,如果不想讓程序因出現(xiàn)異常而被系統(tǒng)中斷或退出的話,必須構(gòu)建相應(yīng)的異常處理機(jī)制。話,必須構(gòu)建相應(yīng)的異常處理機(jī)制。7.2.2 try-catch語(yǔ)句與異常處理語(yǔ)句與

17、異常處理 l在開(kāi)發(fā)應(yīng)用程序的過(guò)程中,可以假定任何代碼塊都有可能在開(kāi)發(fā)應(yīng)用程序的過(guò)程中,可以假定任何代碼塊都有可能引發(fā)異常,特別是引發(fā)異常,特別是clr本身可能引發(fā)的異常,例如溢出、本身可能引發(fā)的異常,例如溢出、數(shù)組越界、除數(shù)為數(shù)組越界、除數(shù)為0等。為了能夠?qū)Ξ惓S行幚恚?。為了能夠?qū)Ξ惓S行幚恚琧#的的提供了提供了try-catch語(yǔ)句,其格式一般如下:語(yǔ)句,其格式一般如下: try 語(yǔ)句塊語(yǔ)句塊1 /可能引發(fā)異常的代碼可能引發(fā)異常的代碼 cacth (異常對(duì)象異常對(duì)象) /捕獲異常類對(duì)象捕獲異常類對(duì)象 語(yǔ)句塊語(yǔ)句塊2 /實(shí)現(xiàn)異常處理實(shí)現(xiàn)異常處理 7.2.2 try-catch語(yǔ)句與異常處

18、理語(yǔ)句與異常處理ltry-catch語(yǔ)句的邏輯含義為:先試著執(zhí)行可能引語(yǔ)句的邏輯含義為:先試著執(zhí)行可能引發(fā)異常的發(fā)異常的“語(yǔ)句塊語(yǔ)句塊1”,如果發(fā)生異常,則由系統(tǒng),如果發(fā)生異常,則由系統(tǒng)自動(dòng)捕獲并將相關(guān)信息封裝保存到自動(dòng)捕獲并將相關(guān)信息封裝保存到“異常對(duì)象異常對(duì)象”之中,然后執(zhí)行之中,然后執(zhí)行“語(yǔ)句塊語(yǔ)句塊2”,實(shí)現(xiàn)異常處理;如,實(shí)現(xiàn)異常處理;如果未發(fā)生異常,則跳過(guò)果未發(fā)生異常,則跳過(guò)catch子句,繼續(xù)執(zhí)行子句,繼續(xù)執(zhí)行try-catch之后的語(yǔ)句之后的語(yǔ)句7.2.2 try-catch語(yǔ)句與異常處理語(yǔ)句與異常處理l【實(shí)例【實(shí)例7-3】修改實(shí)例】修改實(shí)例7-2,添加異常處理功能。,添加異常處

19、理功能。7.2.2 try-catch語(yǔ)句與異常處理語(yǔ)句與異常處理l使用使用try-catch語(yǔ)句時(shí),特別要注意以下兩點(diǎn):語(yǔ)句時(shí),特別要注意以下兩點(diǎn):l(1) catch子語(yǔ)中的異常對(duì)象可以省略。如果省略異常對(duì)象子語(yǔ)中的異常對(duì)象可以省略。如果省略異常對(duì)象,則默認(rèn)為,則默認(rèn)為clr的異常類對(duì)象,否則為指定的異常類的對(duì)的異常類對(duì)象,否則為指定的異常類的對(duì)象。象。l(2) 由于由于try子句中代碼有可能引發(fā)不只一種異常,因此子句中代碼有可能引發(fā)不只一種異常,因此c#允許針對(duì)不同的異常,定義多個(gè)不同的允許針對(duì)不同的異常,定義多個(gè)不同的cacth子句。當(dāng)子句。當(dāng)try子句拋出異常時(shí),系統(tǒng)將根據(jù)異常類型順

20、序查找并執(zhí)行對(duì)子句拋出異常時(shí),系統(tǒng)將根據(jù)異常類型順序查找并執(zhí)行對(duì)應(yīng)的應(yīng)的catch子句,實(shí)現(xiàn)特定異常處理。子句,實(shí)現(xiàn)特定異常處理。7.2.3 finally語(yǔ)句語(yǔ)句l在在try-catch語(yǔ)句中,只有捕獲到了異常,才會(huì)執(zhí)行語(yǔ)句中,只有捕獲到了異常,才會(huì)執(zhí)行cacth子句中的代碼。但還有一些比較特殊的操作,比如文件的子句中的代碼。但還有一些比較特殊的操作,比如文件的關(guān)閉、網(wǎng)絡(luò)連接的斷開(kāi)以及數(shù)據(jù)庫(kù)操作中鎖的釋放等,應(yīng)關(guān)閉、網(wǎng)絡(luò)連接的斷開(kāi)以及數(shù)據(jù)庫(kù)操作中鎖的釋放等,應(yīng)該是無(wú)論是否發(fā)生異常都必須執(zhí)行,否則會(huì)造成系統(tǒng)資源該是無(wú)論是否發(fā)生異常都必須執(zhí)行,否則會(huì)造成系統(tǒng)資源的占用和不必要的浪費(fèi)。類似這些無(wú)論

21、是否捕捉到異常都的占用和不必要的浪費(fèi)。類似這些無(wú)論是否捕捉到異常都必須執(zhí)行的代碼,可用必須執(zhí)行的代碼,可用finally關(guān)鍵字定義。關(guān)鍵字定義。7.2.3 finally語(yǔ)句語(yǔ)句lfinally語(yǔ)句常常與語(yǔ)句常常與try-cacth語(yǔ)句搭配使用,其完整格式:語(yǔ)句搭配使用,其完整格式: try 語(yǔ)句塊語(yǔ)句塊1 /可能引發(fā)異常的代碼可能引發(fā)異常的代碼 cacth (異常對(duì)象異常對(duì)象) /捕獲異常類對(duì)象捕獲異常類對(duì)象 語(yǔ)句塊語(yǔ)句塊2 /實(shí)現(xiàn)異常處理實(shí)現(xiàn)異常處理 finally 語(yǔ)句塊語(yǔ)句塊3 /無(wú)論是否異常,都作最后處理無(wú)論是否異常,都作最后處理 7.2.3 finally語(yǔ)句語(yǔ)句l【實(shí)例【實(shí)例7-4】設(shè)計(jì)一個(gè)】設(shè)計(jì)一個(gè)windows應(yīng)用程序,實(shí)現(xiàn)用應(yīng)用程序,實(shí)現(xiàn)用于捕獲創(chuàng)

溫馨提示

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

評(píng)論

0/150

提交評(píng)論