異常處理和應(yīng)用程序打包課件_第1頁(yè)
異常處理和應(yīng)用程序打包課件_第2頁(yè)
異常處理和應(yīng)用程序打包課件_第3頁(yè)
異常處理和應(yīng)用程序打包課件_第4頁(yè)
異常處理和應(yīng)用程序打包課件_第5頁(yè)
已閱讀5頁(yè),還剩35頁(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)介

第11章異常處理與部署應(yīng)用程序信息管理與信息系統(tǒng)班第11章異常處理與部署應(yīng)用程序信息管理與信息系統(tǒng)班14.1.1用try…catch語(yǔ)句捕獲異常正常情況下,程序流進(jìn)入try控制塊,如果沒(méi)有錯(cuò)誤發(fā)生,就會(huì)正常操作。當(dāng)程序流離開(kāi)try控制塊后,如果沒(méi)有發(fā)生錯(cuò)誤,將執(zhí)行catch后的finally語(yǔ)句塊或順序執(zhí)行;當(dāng)執(zhí)行try時(shí)發(fā)生錯(cuò)誤,程序流就會(huì)跳轉(zhuǎn)到相應(yīng)的catch語(yǔ)句塊。11.1異常處理14.1.1用try…catch語(yǔ)句捕獲異常11.1異【例11-1】try…catch語(yǔ)句結(jié)構(gòu)使用示例。在TextBox控件中接收兩個(gè)數(shù),單擊【計(jì)算】按鈕,顯示這兩個(gè)數(shù)的商。要求使用try…catch語(yǔ)句結(jié)構(gòu)識(shí)別并處理由除數(shù)或被除數(shù)為非數(shù)字引發(fā)的異常、由除數(shù)為零引發(fā)的異常?!纠?1-1】try…catch語(yǔ)句結(jié)構(gòu)使用示例。在Text異常處理和應(yīng)用程序打包課件【計(jì)算】按鈕被單擊時(shí)執(zhí)行的事件過(guò)程代碼如下:privatevoidbutton1_Click(objectsender,EventArgse){inta,b,c; //聲明變量

try//試圖捕獲異常

{//將文本轉(zhuǎn)換為Int32類(lèi)型的整數(shù)

a=Convert.ToInt32(textBox1.Text);}catch//發(fā)生異常時(shí)的處理

{label3.Text="提示:請(qǐng)將被除數(shù)的值輸入為數(shù)字!";return;}【計(jì)算】按鈕被單擊時(shí)執(zhí)行的事件過(guò)程代碼如下:try{b=Convert.ToInt32(textBox2.Text);}catch{label3.Text="提示:請(qǐng)將除數(shù)的值輸入為數(shù)字!";return;}try{c=a/b;}catch(DivideByZeroException)//如果發(fā)生除數(shù)為0的異常{label3.Text="提示:除數(shù)不能為0!";return;}//正確運(yùn)行時(shí)顯示運(yùn)算結(jié)果label3.Text="兩數(shù)的商為:"+c.ToString();}

try11.1.2用try…finally語(yǔ)句清除異常有時(shí)可能希望在程序運(yùn)行時(shí),要求清除異常而不是錯(cuò)誤處理。若希望使程序在出現(xiàn)異常時(shí)繼續(xù)執(zhí)行,且不顯示出錯(cuò)信息。此時(shí)可以使用try-finally語(yǔ)句實(shí)現(xiàn)清除異常。它不僅抑制了出錯(cuò)消息,而且所有包含在finally塊中的代碼在異常被引發(fā)后仍然會(huì)被執(zhí)行。【例14-2】設(shè)計(jì)一個(gè)Windows應(yīng)用程序,用來(lái)檢查指定文件是否存在。要求無(wú)論文件存在與否,程序均能正常結(jié)束并顯示“感謝使用本軟件”的信息框。11.1.2用try…finally語(yǔ)句清除異常文件存在或不存在的程序運(yùn)行結(jié)果

文件存在或不存在的程序運(yùn)行結(jié)果【檢查】按鈕被單擊時(shí)執(zhí)行的事件過(guò)程代碼如下:privatevoidbutton1_Click(objectsender,EventArgse){try{//判斷文件是否存在

if(File.Exists(textBox1.Text)){label2.Text="該文件存在";}elselabel2.Text="該文件不存在";}finally//無(wú)論是否發(fā)生異常,都正常結(jié)束

{MessageBox.Show("感謝使用本軟件!","程序結(jié)束");}}【檢查】按鈕被單擊時(shí)執(zhí)行的事件過(guò)程代碼如下:11.1.3try…catch…finally語(yǔ)句結(jié)構(gòu)前面介紹的try…catch結(jié)構(gòu)和try…finally結(jié)構(gòu)分別用來(lái)捕獲處理異常和清除異常。本節(jié)介紹的try…catch…finally結(jié)構(gòu)能將上述二者結(jié)合起來(lái),使之成為一個(gè)整體?!纠?4-3】在【例14-1】的基礎(chǔ)上修改【計(jì)算】按鈕單擊事件過(guò)程的代碼如下:11.1.3try…catch…finally語(yǔ)句結(jié)構(gòu)privatevoidbutton1_Click(objectsender,EventArgse){inta,b,c;try//試圖捕獲異常

{//將文本轉(zhuǎn)換為Int32類(lèi)型的整數(shù)

a=Convert.ToInt32(textBox1.Text);b=Convert.ToInt32(textBox2.Text);c=a/b;label3.Text="兩數(shù)的商為:"+c.ToString();}catch(FormatException)//處理轉(zhuǎn)換發(fā)生的異常

{label3.Text="請(qǐng)將被除數(shù)或除數(shù)的值輸入為數(shù)字!";}privatevoidbutton1_Click(objcatch(DivideByZeroException)//處理除數(shù)為零的異常

{label3.Text="除數(shù)不能為零!";}finally//清除異常

{MessageBox.Show("感謝使用本軟件,程序正常結(jié)束");}}catch(DivideByZeroException)11.1.4拋出異常和常用異常類(lèi)1.拋出異常在程序設(shè)計(jì)時(shí)可能需要有意的引發(fā)某種異常,以測(cè)試程序在不同狀態(tài)下的運(yùn)行情況。VisualSdudio2005提供的throw方法就是專(zhuān)門(mén)用于人為引發(fā)異常的。通常將這種主要用于測(cè)試程序的、能夠自動(dòng)引發(fā)異常的方法稱(chēng)為“拋出異?!?。例如下列代碼將在程序運(yùn)行時(shí)引發(fā)一個(gè)除數(shù)為零的異常。thrownewDivideByZeroException();11.1.4拋出異常和常用異常類(lèi)2.常用的異常類(lèi)MemberAccessException:訪問(wèn)錯(cuò)誤:類(lèi)型成員不能被訪問(wèn)ArgumentException:參數(shù)錯(cuò)誤:方法的參數(shù)無(wú)效ArgumentNullException:參數(shù)為空:給方法傳遞一個(gè)不可接受的空參數(shù)ArithmeticException:數(shù)學(xué)計(jì)算錯(cuò)誤:由于數(shù)學(xué)運(yùn)算導(dǎo)致的異常,覆蓋面廣ArrayTypeMismatchException:數(shù)組類(lèi)型不匹配DivideByZeroException:被零除FormatException:參數(shù)的格式不正確IndexOutOfRangeException:索引超出范圍,小于0或比最后一個(gè)元素的索引還大2.常用的異常類(lèi)InvalidCastException:非法強(qiáng)制轉(zhuǎn)換,在顯式轉(zhuǎn)換失敗時(shí)引發(fā)MulticastNotSupportedException:不支持的組播:組合兩個(gè)非空委派失敗時(shí)引發(fā)NotSupportedException:調(diào)用的方法在類(lèi)中沒(méi)有實(shí)現(xiàn)NullReferenceException:引用空引用對(duì)象時(shí)引發(fā)OutOfMemoryException:無(wú)法為新語(yǔ)句分配內(nèi)存時(shí)引發(fā),內(nèi)存不足OverflowException:溢出StackOverflowException:棧溢出TypeInitializationException:錯(cuò)誤的初始化類(lèi)型:靜態(tài)構(gòu)造函數(shù)有問(wèn)題時(shí)引發(fā)NotFiniteNumberException:無(wú)限大的值:數(shù)字不合法InvalidCastException:非法強(qiáng)制轉(zhuǎn)換,在11.1.5用戶自定義異常對(duì)于某些特殊情況,程序員可以通過(guò)繼承Exception來(lái)創(chuàng)建自己的異常類(lèi)。聲明一個(gè)異常類(lèi)的語(yǔ)法格式如下:classExceptionName:Exception{ ……}引發(fā)自定義異常的格式如下:throw(ExceptionName);11.1.5用戶自定義異常11.2部署Windows應(yīng)用程序11.2.1生成安裝包打開(kāi)設(shè)計(jì)完成的項(xiàng)目,“文件”菜單“添加”下的“新建項(xiàng)目”命令。在對(duì)話框“項(xiàng)目類(lèi)型”列表中選擇“安裝和部署”,在模板列表中選擇“安裝向?qū)А?,單擊【確定】按鈕啟動(dòng)“安裝項(xiàng)目向?qū)А?。在“歡迎”界面中直接單擊【下一步】按鈕,在對(duì)話框中選擇“為Windows應(yīng)用程序創(chuàng)建一個(gè)安裝程序”后單擊【下一步】按鈕。11.2部署Windows應(yīng)用程序11.2.1生成安在“選擇要包含的項(xiàng)目輸出”對(duì)話框中選擇需要包含的內(nèi)容(至少要包含“主輸出”)單擊【下一步】按鈕。在對(duì)話框中單擊【添加】按鈕可將希望包含到安裝項(xiàng)目中的一些輔助文件添加到安裝包。向?qū)ЫY(jié)束后將自動(dòng)進(jìn)入“文件系統(tǒng)”窗口,單擊【應(yīng)用程序】文件夾可以看到前面添加到其中的主程序和附加文件。鼠標(biāo)指向窗口中“用戶的程序菜單”單擊右鍵,在彈出的快捷菜單中執(zhí)行“添加”項(xiàng)下的“文件夾”命令,使安裝程序能夠在Windows“開(kāi)始”菜單中創(chuàng)建一個(gè)目錄。選擇新創(chuàng)建的文件夾,在文件夾內(nèi)容窗格中單擊右鍵,在彈出的快捷菜單中執(zhí)行“創(chuàng)建新的快捷方式”命令。在打開(kāi)的對(duì)話框中選擇“應(yīng)用程序文件”中的“主輸出”(主程序)后單擊【確定】按鈕。在“選擇要包含的項(xiàng)目輸出”對(duì)話框中選擇需要包含的內(nèi)容(至少11.2.2編譯安裝項(xiàng)目所有設(shè)置結(jié)束后,可在VisualStudio2005工具欄中解決方案配置,由“Debug”(調(diào)試)改為“Release”(發(fā)布)。選中安裝項(xiàng)目名稱(chēng),單擊鼠標(biāo)右鍵,在彈出的快捷菜單中執(zhí)行“生成”命令,就能得到編譯打包過(guò)的,存放在源程序文件夾下Release子文件夾中的安裝文件Setup.exe文件。11.2.2編譯安裝項(xiàng)目本章小結(jié)本章通過(guò)一些小實(shí)例的分析和實(shí)現(xiàn),講解了C#中異常處理與應(yīng)用程序的部署。本章小結(jié)本章通過(guò)一些小實(shí)例的分析和實(shí)現(xiàn),講解了C#中異常處理第11章異常處理與部署應(yīng)用程序信息管理與信息系統(tǒng)班第11章異常處理與部署應(yīng)用程序信息管理與信息系統(tǒng)班14.1.1用try…catch語(yǔ)句捕獲異常正常情況下,程序流進(jìn)入try控制塊,如果沒(méi)有錯(cuò)誤發(fā)生,就會(huì)正常操作。當(dāng)程序流離開(kāi)try控制塊后,如果沒(méi)有發(fā)生錯(cuò)誤,將執(zhí)行catch后的finally語(yǔ)句塊或順序執(zhí)行;當(dāng)執(zhí)行try時(shí)發(fā)生錯(cuò)誤,程序流就會(huì)跳轉(zhuǎn)到相應(yīng)的catch語(yǔ)句塊。11.1異常處理14.1.1用try…catch語(yǔ)句捕獲異常11.1異【例11-1】try…catch語(yǔ)句結(jié)構(gòu)使用示例。在TextBox控件中接收兩個(gè)數(shù),單擊【計(jì)算】按鈕,顯示這兩個(gè)數(shù)的商。要求使用try…catch語(yǔ)句結(jié)構(gòu)識(shí)別并處理由除數(shù)或被除數(shù)為非數(shù)字引發(fā)的異常、由除數(shù)為零引發(fā)的異常?!纠?1-1】try…catch語(yǔ)句結(jié)構(gòu)使用示例。在Text異常處理和應(yīng)用程序打包課件【計(jì)算】按鈕被單擊時(shí)執(zhí)行的事件過(guò)程代碼如下:privatevoidbutton1_Click(objectsender,EventArgse){inta,b,c; //聲明變量

try//試圖捕獲異常

{//將文本轉(zhuǎn)換為Int32類(lèi)型的整數(shù)

a=Convert.ToInt32(textBox1.Text);}catch//發(fā)生異常時(shí)的處理

{label3.Text="提示:請(qǐng)將被除數(shù)的值輸入為數(shù)字!";return;}【計(jì)算】按鈕被單擊時(shí)執(zhí)行的事件過(guò)程代碼如下:try{b=Convert.ToInt32(textBox2.Text);}catch{label3.Text="提示:請(qǐng)將除數(shù)的值輸入為數(shù)字!";return;}try{c=a/b;}catch(DivideByZeroException)//如果發(fā)生除數(shù)為0的異常{label3.Text="提示:除數(shù)不能為0!";return;}//正確運(yùn)行時(shí)顯示運(yùn)算結(jié)果label3.Text="兩數(shù)的商為:"+c.ToString();}

try11.1.2用try…finally語(yǔ)句清除異常有時(shí)可能希望在程序運(yùn)行時(shí),要求清除異常而不是錯(cuò)誤處理。若希望使程序在出現(xiàn)異常時(shí)繼續(xù)執(zhí)行,且不顯示出錯(cuò)信息。此時(shí)可以使用try-finally語(yǔ)句實(shí)現(xiàn)清除異常。它不僅抑制了出錯(cuò)消息,而且所有包含在finally塊中的代碼在異常被引發(fā)后仍然會(huì)被執(zhí)行?!纠?4-2】設(shè)計(jì)一個(gè)Windows應(yīng)用程序,用來(lái)檢查指定文件是否存在。要求無(wú)論文件存在與否,程序均能正常結(jié)束并顯示“感謝使用本軟件”的信息框。11.1.2用try…finally語(yǔ)句清除異常文件存在或不存在的程序運(yùn)行結(jié)果

文件存在或不存在的程序運(yùn)行結(jié)果【檢查】按鈕被單擊時(shí)執(zhí)行的事件過(guò)程代碼如下:privatevoidbutton1_Click(objectsender,EventArgse){try{//判斷文件是否存在

if(File.Exists(textBox1.Text)){label2.Text="該文件存在";}elselabel2.Text="該文件不存在";}finally//無(wú)論是否發(fā)生異常,都正常結(jié)束

{MessageBox.Show("感謝使用本軟件!","程序結(jié)束");}}【檢查】按鈕被單擊時(shí)執(zhí)行的事件過(guò)程代碼如下:11.1.3try…catch…finally語(yǔ)句結(jié)構(gòu)前面介紹的try…catch結(jié)構(gòu)和try…finally結(jié)構(gòu)分別用來(lái)捕獲處理異常和清除異常。本節(jié)介紹的try…catch…finally結(jié)構(gòu)能將上述二者結(jié)合起來(lái),使之成為一個(gè)整體。【例14-3】在【例14-1】的基礎(chǔ)上修改【計(jì)算】按鈕單擊事件過(guò)程的代碼如下:11.1.3try…catch…finally語(yǔ)句結(jié)構(gòu)privatevoidbutton1_Click(objectsender,EventArgse){inta,b,c;try//試圖捕獲異常

{//將文本轉(zhuǎn)換為Int32類(lèi)型的整數(shù)

a=Convert.ToInt32(textBox1.Text);b=Convert.ToInt32(textBox2.Text);c=a/b;label3.Text="兩數(shù)的商為:"+c.ToString();}catch(FormatException)//處理轉(zhuǎn)換發(fā)生的異常

{label3.Text="請(qǐng)將被除數(shù)或除數(shù)的值輸入為數(shù)字!";}privatevoidbutton1_Click(objcatch(DivideByZeroException)//處理除數(shù)為零的異常

{label3.Text="除數(shù)不能為零!";}finally//清除異常

{MessageBox.Show("感謝使用本軟件,程序正常結(jié)束");}}catch(DivideByZeroException)11.1.4拋出異常和常用異常類(lèi)1.拋出異常在程序設(shè)計(jì)時(shí)可能需要有意的引發(fā)某種異常,以測(cè)試程序在不同狀態(tài)下的運(yùn)行情況。VisualSdudio2005提供的throw方法就是專(zhuān)門(mén)用于人為引發(fā)異常的。通常將這種主要用于測(cè)試程序的、能夠自動(dòng)引發(fā)異常的方法稱(chēng)為“拋出異?!?。例如下列代碼將在程序運(yùn)行時(shí)引發(fā)一個(gè)除數(shù)為零的異常。thrownewDivideByZeroException();11.1.4拋出異常和常用異常類(lèi)2.常用的異常類(lèi)MemberAccessException:訪問(wèn)錯(cuò)誤:類(lèi)型成員不能被訪問(wèn)ArgumentException:參數(shù)錯(cuò)誤:方法的參數(shù)無(wú)效ArgumentNullException:參數(shù)為空:給方法傳遞一個(gè)不可接受的空參數(shù)ArithmeticException:數(shù)學(xué)計(jì)算錯(cuò)誤:由于數(shù)學(xué)運(yùn)算導(dǎo)致的異常,覆蓋面廣ArrayTypeMismatchException:數(shù)組類(lèi)型不匹配DivideByZeroException:被零除FormatException:參數(shù)的格式不正確IndexOutOfRangeException:索引超出范圍,小于0或比最后一個(gè)元素的索引還大2.常用的異常類(lèi)InvalidCastException:非法強(qiáng)制轉(zhuǎn)換,在顯式轉(zhuǎn)換失敗時(shí)引發(fā)MulticastNotSupportedException:不支持的組播:組合兩個(gè)非空委派失敗時(shí)引發(fā)NotSupportedException:調(diào)用的方法在類(lèi)中沒(méi)有實(shí)現(xiàn)NullReferenceException:引用空引用對(duì)象時(shí)引發(fā)OutOfMemoryException:無(wú)法為新語(yǔ)句分配內(nèi)存時(shí)引發(fā),內(nèi)存不足OverflowException:溢出StackOverflowException:棧溢出TypeInitializationException:錯(cuò)誤的初始化類(lèi)型:靜態(tài)構(gòu)造函數(shù)有問(wèn)題時(shí)引發(fā)NotFiniteNumberException:無(wú)限大的值:數(shù)字不合法InvalidCastException:非法強(qiáng)制轉(zhuǎn)換,在11.1.5用戶自定義異常對(duì)于某些特殊情況,程序員可以通過(guò)繼承Exception來(lái)創(chuàng)建自己的異常類(lèi)。聲明一個(gè)異常類(lèi)的語(yǔ)法格式如下:classExceptionN

溫馨提示

  • 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)論