




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1回顧序列化與反序列化文件類目錄類思考:2staticvoidMain(){stringfileName=Console.ReadLine();
FileStream
fs=newFileStream(fileName, FileMode.Create);
BinaryWriterw=newBinaryWriter(fs);stringteaNo=Console.ReadLine();stringteaName=Console.ReadLine();
int
teaAge= Convert.ToInt32(Console.ReadLine());
if(teaName==“mary”){
w.Write(teaNo);
w.Write(teaName);
w.Write(teaAge);}
w.Close();fs.Close();}程序片段是否有問題?第9章
調(diào)式與異常處理44目標程序的調(diào)試異常處理引例15staticvoidMain(){
StreamWriters=newStreamWriter("f:\1.txt");s.WriteLine(“welcome");s.Close();}語法錯誤。staticvoidMain(){
StreamWriters=newStreamWriter(“f:\\t\\1.txt”);s.WriteLine(“welcome");s.Close();}運行錯誤。程序調(diào)試6在開發(fā)大型項目中,程序的調(diào)試是一個漫長的過程。語法錯誤:語法錯誤發(fā)生在語句沒有適當(dāng)構(gòu)造、關(guān)鍵字被拼錯或標點被忽略的時候。
運行時錯誤:運行時錯誤發(fā)生在程序試圖完成一個操作,但它在運行時不被允許。項目開發(fā)時,代碼中異常陷阱無處不在,如數(shù)據(jù)庫連接失敗、IO錯誤、數(shù)據(jù)溢出、數(shù)組下標越界等時常發(fā)生。再熟練的程序員也不能說自己編寫的代碼沒有任何問題。引例27staticvoidMain(){stringfileName=“”;
filrName=Console.ReadLine();stringline;
StreamReaders=newStreamReader(fileName);
line=s.ReadLine();s.Close();}如果輸入錯誤呢?就應(yīng)該提示輸入錯誤,并且重新輸入。引例28while(true){filename=Console.ReadLine();if(File.Exists(filename)){break;}else{Console.WriteLine("wrong,inputagain");continue;}}對于編程人員來說,可以添加if語句,判斷文件路徑是否輸入正確,但是這樣太辛苦,而且編程人員有時無法考慮的很周全。所以C#中,提出“異?!睓C制,來幫你管理,減輕編程人員的工作。9.2異常處理結(jié)構(gòu)C#允許我們編寫代碼,捕獲異常事件,并作相應(yīng)的處理,然后讓程序繼續(xù)執(zhí)行,這就是C#的異常處理機制。
C#提供了各種異常類來處理不同的異常,所有的異常類均繼承于System.Exception。C#的異常類9.2.1try-catch結(jié)構(gòu)try{unsafestatement}catch(ExceptionType1ex){……}catch(ExceptionTypeNex){……}…注意:1.將會出現(xiàn)問題的代碼放在try語句塊內(nèi)。2.try語句塊必需跟一個或多個catch語句塊。3.每個catch代碼段聲明其能處理的一種特定類型的異常,并進行處理。4.如果try中產(chǎn)生異常,則立刻跳轉(zhuǎn)到第一個匹配的catch代碼段處理。從異常層次結(jié)構(gòu)上,通常將子類異常寫在前,父類異常寫后面的catch語句中。5.程序無論是否捕獲異常,都將從最后一個catch后繼續(xù)執(zhí)行。引例112staticvoidMain(){stringfileName=“”;stringline;
filrName=Console.ReadLine();
StreamReaders=newStreamReader(filename);
line=s.ReadLine();s.Close();}如果輸入錯誤呢?就應(yīng)該提示輸入錯誤,并且重新輸入。示例113stringfilename;stringline;
try{filename=Console.ReadLine();StreamReaders=newStreamReader(filename);line=s.ReadLine();
s.Close();
}catch(Exceptione
){Console.WriteLine("wrong,inputagain");
}示例114stringfilename;stringline;
while(true){try{filename=Console.ReadLine();StreamReaders=newStreamReader(filename);line=s.ReadLine();
s.Close();break;}catch(Exceptione){Console.WriteLine("wrong,inputagain");
continue;}}
示例2staticvoidMain(){stringfileName=Console.ReadLine();
FileStream
fs=newFileStream(fileName, FileMode.Create);
BinaryWriterw=newBinaryWriter(fs);stringteaNo=Console.ReadLine();stringteaName=Console.ReadLine();
int
teaAge= Convert.ToInt32(Console.ReadLine());
if(teaName==“mary”){
w.Write(teaNo);
w.Write(teaName);
w.Write(teaAge);}
w.Close();fs.Close();}DirectoryNotFoundExceptionFormatException修改后的程序try{stringfileName=Console.ReadLine();
FileStream
fs=newFileStream(fileName, FileMode.Create);
BinaryWriterw=newBinaryWriter(fs);stringteaNo=Console.ReadLine();stringteaName=Console.ReadLine();
int
teaAge=Convert.ToInt32(Console.ReadLine());…
w.Close();fs.Close();}catch(DirectoryNotFoundException){Console.WriteLine(“不存在該目錄”);}catch(FormatException){Console.WriteLine(“格式錯誤”);}catch(Exceptione){Console.WriteLine(“其他錯誤”);}思考:當(dāng)控制臺輸入d:\\f1.txt1MaryAb時,程序是否有問題?9.2.2try-catch-finally結(jié)構(gòu)try{unsafestatement}catch(ExceptionType1ex){……}catch(ExceptionTypeNex){……}finally{…}注意:1.無論程序是否發(fā)生異常,finally結(jié)構(gòu)都將執(zhí)行。2.Finally結(jié)構(gòu)通常用于進行文件的關(guān)閉,內(nèi)存的釋放,垃圾的回收等。改進后的程序try{…
if(teaName.Trim()=="mary"){w.Write(teaNo);w.Write(teaName);w.Write(teaAge);}}catch(DirectoryNotFoundException){Console.WriteLine(“不存在該目錄”);}catch(FormatException){Console.WriteLine(“格式錯誤”);}catch(Exceptione){Console.WriteLine(“其他錯誤”);}finally{if(w!=null)w.Close();if(fs!=null)fs.Close();}思考:假設(shè)用戶輸入的年齡為150,希望程序能當(dāng)成錯誤的數(shù)據(jù)處理,并引發(fā)異常。該如何處理?9.4.1主動引發(fā)異常在某些情況下,程序代碼需要主動引發(fā)異常,以便向用戶報告錯誤。語法:try{ if(條件)//一般用if語句中
thrownew
ExceptionType();}catch(ExceptionTypee){
處理該異常}改進后的程序try{stringfileName=Console.ReadLine();
FileStream
fs=newFileStream(fileName, FileMode.Create);
BinaryWriterw=newBinaryWriter(fs);stringteaNo=Console.ReadLine();stringteaName=Console.ReadLine();
int
teaAge= Convert.ToInt32(Console.ReadLine());
if(teaAge<15||teaAge>45)thrownewArgumentOutOfRangeException();
if(teaName==“mary”){
w.Write(teaNo);
w.Write(teaName);
w.Write(teaAge);}
w.Close();}catch(DirectoryNotFoundException){Console.WriteLine("不存在該目錄");}catch(FormatException){Console.WriteLine("格式錯誤");}catch(ArgumentOutOfRangeException){
Console.WriteLine("年齡在15-45之間");}catch(Exceptione){Console.WriteLine("其他錯誤");}finally{if(w!=null)w.Close();if(fs!=null)fs.Close();}9.5使用異常的指導(dǎo)原則
異常處理時提高程序可靠性的重要手段,但它也會增加編程的工作量,同時造成程序性能下降。例如,在程序不出錯的情況下,常規(guī)代碼段的運行效率明顯要高于將其放在try代碼段中的運行效率。因此,開發(fā)人員需要根據(jù)具體情況來確定異常的使用時機和范圍。練習(xí)1:22try{unsafe();
輸出T1;}catch(IOExceptione){
輸出T2;}catch{
輸出T3;}finally{
輸出T4;}
輸出T5;程序正常執(zhí)行出現(xiàn)IO異常且被捕獲出現(xiàn)異常但沒有被IO捕獲catch
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年中國錦綸切片行業(yè)競爭格局規(guī)劃研究報告
- 2025-2030年中國銅礦采選行業(yè)發(fā)展?fàn)顩r及營銷戰(zhàn)略研究報告
- 2025-2030年中國蜂窩紙板市場運營狀況及投資戰(zhàn)略研究報告
- 2025-2030年中國藥學(xué)教育發(fā)展模式及未來投資戰(zhàn)略分析報告
- 2025-2030年中國聚碳酸酯pc行業(yè)運行狀況規(guī)劃分析報告
- 2025-2030年中國粗雜糧行業(yè)競爭格局及發(fā)展前景分析報告
- 2025-2030年中國空氣污染治理設(shè)備市場經(jīng)營狀況及發(fā)展趨勢分析報告
- 2025-2030年中國碼垛機器人市場運行動態(tài)及發(fā)展前景分析報告
- 幼兒健康有營養(yǎng)的蔬菜教案(12篇)
- 中國傳媒大學(xué)《電子與電工技術(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 北師大版二年級數(shù)學(xué)下冊全冊10套試卷(附答案)
- GB/T 2423.17-2024環(huán)境試驗第2部分:試驗方法試驗Ka:鹽霧
- 數(shù)字出版概論 課件 第六章 數(shù)字內(nèi)容加工、管理技術(shù)
- 糖尿病并發(fā)癥的早期篩查
- 2019年山東省職業(yè)院校技能大賽中職組“沙盤模擬企業(yè)經(jīng)營”賽項規(guī)程
- GB/T 32399-2024信息技術(shù)云計算參考架構(gòu)
- 初中體育與健康 初二 水平四(八年級)田徑大單元教學(xué)設(shè)計+快速跑教案
- 2024年西南大學(xué)附中初升高選拔測試語文試卷真題(精校打印)
- 2024-2025學(xué)年華東師大版數(shù)學(xué)七年級上冊計算題專項訓(xùn)練
- 移動通信運營商倉庫安全管理制度
- DL∕T 5452-2012 變電工程初步設(shè)計內(nèi)容深度規(guī)定
評論
0/150
提交評論