日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > C# >内容正文

C#

C#编程(八十一)---------- 捕获异常

發(fā)布時(shí)間:2025/3/15 C# 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#编程(八十一)---------- 捕获异常 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

捕獲異常

前面主要說了關(guān)于異常的一些基礎(chǔ)和理論知識(shí),沒有進(jìn)入到正真的異常案例,這一講通過幾個(gè)案例來描述一下異常的捕獲和處理.

案例代碼:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

?

namespace 異常處理

{

??? class Program

??? {

??????? int result;

??????? Program()

??????? {

??????????? result = 0;

??????? }

??????? public void DisPlay(int a, int b)

??????? {

??????????? try//這個(gè)話可能有問題

??????????? {

??????????????? result = a / b;

??????????? }

??????????? catch (DivideByZeroException e) //不知道這個(gè)異常代表什么自己去查,有過那句話真的有問題,我就得治它

??????????? {

??????????????? Console.WriteLine("Exception caught: {0}", e);

??????????? }

??????????? finally//不管如何,下面這句話我必須得輸出

??????????? {

??????????????? Console.WriteLine("Result: {0}", result);

??????????? }

??????? }

??????? static void Main(string[] args)

??????? {

??????????? Program p = new Program();

??????????? p.DisPlay(25, 0);

??????????? Console.ReadKey();

??????? }

??? }

}

?

別和我說你看不懂,唯一看不懂得地方就是哪一點(diǎn)try-catch語(yǔ)句的地方,我都注釋好了(你試試沒有try-catch語(yǔ)句會(huì)咋樣?===>如果沒有try,程序會(huì)終止)

?

?

簡(jiǎn)單說點(diǎn)其他小內(nèi)容:

try ... catch 的目的是解決程序在出現(xiàn)錯(cuò)誤時(shí)無法繼續(xù)執(zhí)行下去的問題。

try不一定只能和catch 配對(duì),也可以try{}finally{}這樣的形式,這不是沒有意義,因?yàn)檫@樣可以保證即使發(fā)生了異常,finally里面的代碼一定會(huì)被執(zhí)行。有時(shí)候,這個(gè)還是非常有用的。 比如可以用來釋放一些自己占用的資源,然后讓調(diào)用者處理異常。

?

?

對(duì)異常的捕獲由三個(gè)部分組成:

?

try { //執(zhí)行的代碼,其中可能有異常。一旦發(fā)現(xiàn)異常,則立即跳到catch執(zhí)行。否則不會(huì)執(zhí)行catch里面的內(nèi)容 } catch { //除非try里面執(zhí)行代碼發(fā)生了異常,否則這里的代碼不會(huì)執(zhí)行 } finally { //不管什么情況都會(huì)執(zhí)行,包括try catch 里面用了return ,可以理解為只要執(zhí)行了try或者catch,就一定會(huì)執(zhí)行 finally }

?

?

?

Try語(yǔ)句

Catch語(yǔ)句

Finally語(yǔ)句

try -- 意思是 “試一試” catch --? 意思是 “抓”,抓一抓。 沒有錯(cuò),就抓不到錯(cuò)。有錯(cuò)才能抓到并處理。

?

一個(gè)try可以跟任意個(gè)catch(個(gè)數(shù)沒有限制),主要是看有多少個(gè)異常類型,包括自定義的,Eeception是個(gè)類, 申明一個(gè)ex的Eeception對(duì)象,這個(gè)ex里面包含了當(dāng)前發(fā)生在捕捉到的try塊的所有異常信息,如ex.Message最常用的 (try塊的詳細(xì)異常信息),

ex的位置:只能在cath塊 (異常處理塊) ex的作用:保存著系統(tǒng)捕獲的異常; 為什么要用ex:? 因?yàn)槟悴皇巧?#xff0c;并不能預(yù)測(cè)到你的程序會(huì)出什么錯(cuò),所以就用 MessageBox.Show(ex.Message);讓系統(tǒng)提示你程序錯(cuò)在哪里,就可以順藤摸瓜,逮到錯(cuò)誤源從而解決他!

如果catch語(yǔ)句捕獲了try語(yǔ)句不可能拋出的異常時(shí),代碼將不能通過,如果catch語(yǔ)句中使用如下方式:catch( Exception? e ){ }將在任何情況下,編譯都能通過。

?

?try{??? DataConnection.Open();??? DataCommand.ExecuteReader();??? ...??? return;}finally{??? DataConnection.Close();}

無論是否拋出異常,也無論在catch 中從什么地方return返回,finally語(yǔ)句塊總是會(huì)執(zhí)行,這樣你有機(jī)會(huì)調(diào)用Close來關(guān)閉數(shù)據(jù)庫(kù)連接(即使未打開或打開失敗,關(guān)閉操作永遠(yuǎn)是可以執(zhí)行的),以便于釋放已經(jīng)產(chǎn)生的連接,釋放資源。 另外說明,return是可以放在try語(yǔ)句塊中的。但不管在什么時(shí)機(jī)返回,在返回前,finally將會(huì)執(zhí)行。

?

?

throw(不止throws)的作用是當(dāng)代碼執(zhí)行到此處時(shí)認(rèn)為的讓程序出錯(cuò),出錯(cuò)原因是你指定的內(nèi)容 catch的作用是try包含的內(nèi)容運(yùn)行出錯(cuò)時(shí),catch撲捉到try里面出錯(cuò)的原因,至于對(duì)于這個(gè)錯(cuò)誤你怎么操作就放在catch里,你可以把錯(cuò)誤寫日志,messagebox輸出等等

備注:throw是語(yǔ)句,拋出一個(gè)異常 ; throws是方法拋出一個(gè)異常;

throw語(yǔ)法: throw <異常對(duì)象>

(C#中是沒有throws的,Java里有!別搞錯(cuò)了)throws語(yǔ)法 : [修飾符] <返回值類型> <方法名>([參數(shù)列表]) [throws <異常類>]

其中:異常類可以聲明多個(gè),用逗號(hào)分隔.

上面的那個(gè)案例,你試試經(jīng)catch語(yǔ)句里的內(nèi)容換成以下內(nèi)容?

throw e;(應(yīng)該會(huì)程序終止)

也可以換成這樣:

throw new Exception("出錯(cuò)啦!", e);//這個(gè)時(shí)候也會(huì)終止程序,你注意看終止信息!!!

注意在捕獲并拋出異常時(shí)應(yīng)使用 throw new Exception("出錯(cuò)啦!", ex); 方式,則可獲得異常的具體位置。

當(dāng)在VS調(diào)試或者DEBUG模式下運(yùn)行程序成都可獲得異常發(fā)生的具體位置。

但當(dāng)在獨(dú)立運(yùn)行的RELEASE模式下時(shí),異常只會(huì)記錄最初的調(diào)用位置。

當(dāng)執(zhí)行目錄不包含 *.pdb 文件時(shí),異常信息中不會(huì)包含代碼及行號(hào)信息。

?

最后以一個(gè)案例結(jié)束異常捕獲的部分:

??? class Program

??? {

??????? static void Main(string[] args)

??????? {

??????????? string userInput;

??????????? while (true)

??????????? {

??????????????? try

??????????????? {

??????????????????? Console.WriteLine("請(qǐng)輸入0到5之間的任意一個(gè)數(shù)字: ");

??????????????????? userInput = Console.ReadLine();

??????????????????? if (userInput == "")

??????????????????? {

??????????????????????? //當(dāng)用戶輸入""時(shí),跳出try和while但是仍然執(zhí)行finally

??????????????????????? break;

??????????????????? }

??????????????????? int index = Convert.ToInt32(userInput);

??????????????????? if (index < 0 || index > 5)

??????????????????? {

??????????????????????? //拋出異常

??????????????????????? //可使用System.Exception類,但是該類是個(gè)基本類,,沒有包含特定錯(cuò)誤信息

??????????????????????? //此處可用派生類IndexOutRangeException

??????????????????????? throw new IndexOutOfRangeException("請(qǐng)你看看要求好不好,你輸入的是: " + userInput);

??????????????????? }

??????????????????? Console.WriteLine("你輸入了:" + index);

??????????????? }

??????????????? //傳遞給catch塊的參數(shù)只能用于該catch塊,因此后續(xù)catch塊仍然可用同名參數(shù)ex

??????????????? catch (IndexOutOfRangeException ex)

??????????????? {

??????????????????? Console.WriteLine("異常了: " + ex.Message);

??????????????? }

??????????????? /*

???????????????? * 如果沒有前面catch塊中捕獲的異常類,這個(gè)也能處理IndexOutOfRangeException

???????????????? * 計(jì)算機(jī)只執(zhí)行它在catchh塊列表中找到的第一個(gè)合適的catch塊

???????????????? * 基類的一個(gè)引用可一直想派生于他的所有類實(shí)例

???????????????? * 因此,最上面的catch塊應(yīng)用于最特殊的異常情況,最后的是一般的catch塊

???????????????? *

???????????????? */

??????????????? catch (Exception ex)

??????????????? {

??????????????????? Console.WriteLine("拋出異常: " + ex.Message);

??????????????? }

??????????????? /*

???????????????? * 最一般的catch塊(不帶參數(shù)),用于處理其他沒用C#編寫的代碼拋出的異常

???????????????? * C#中只有派生于System.Exception類的實(shí)例才能作為一場(chǎng)拋出,其他語(yǔ)言沒這個(gè)限制

???????????????? * 此catch塊同樣捕獲全部異常,只是不知異常的詳細(xì)信息

???????????????? */

??????????????? catch

??????????????? {

??????????????????? //因?yàn)槲覀儾恢肋@個(gè)異常表示什么類

??????????????????? Console.WriteLine("不知道什么異常,你自己猜去把.");

??????????????? }

??????????????? //無論執(zhí)行try,catch最后都執(zhí)行finally塊

??????????????? finally

??????????????? {

??????????????????? Console.WriteLine("不管咋樣,我都得執(zhí)行,哥就是牛X");

??????????????? }

??????????????? /* 沒有處理異常時(shí)發(fā)生的情況

??????????????? * 生成一個(gè)異常后,代碼中沒有catch塊能處理這異常,由.NET運(yùn)行庫(kù)捕獲

??????????????? * .NET運(yùn)行庫(kù)把整個(gè)程序放在另一個(gè)更大的try塊中,用一個(gè)catch處理捕獲所有異常

??????????????? */

??????????? }

??????? }

}

?

注意:一般編寫一個(gè)可執(zhí)行程序,硬不貨異常,編寫一個(gè)庫(kù),最好不要補(bǔ)貨,要家丁調(diào)用代碼可以處理.

轉(zhuǎn)載于:https://www.cnblogs.com/FinleyJiang/p/7606470.html

總結(jié)

以上是生活随笔為你收集整理的C#编程(八十一)---------- 捕获异常的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日韩啊啊啊 | 国产91精品一区二区麻豆亚洲 | 黄色av小说在线观看 | 亚洲在线a | 999视频 | 欧美黄色一级大片 | 日韩三级电影网址 | 四虎影库 | 日日草草 | 亚洲精品在 | 午夜免费福利视频 | 国产精品一区二区三区在线播放 | 大尺度做爰床戏呻吟舒畅 | 亚洲欧美中文日韩在线 | 国产欧美在线观看视频 | 99精品网 | 国产欧美在线观看视频 | 久久久国产精品成人免费 | 五月激情六月丁香 | 欧美性开放视频 | 成人高潮片免费网站 | 深夜影院深a | 天天草影院 | 大胸美女网站 | 免费h片在线观看 | 国产香蕉在线视频 | 国产18p | 亚洲精品在线免费观看视频 | 日韩一级影视 | 国产麻豆精品视频 | 老太太av | 亚洲一区二区三区色 | 日韩小视频在线观看 | 伊人精品一区二区三区 | 日日色av| 少妇裸体性生交 | 一卡二卡三卡在线视频 | 日韩黄片一区二区三区 | 51人人看| 一级免费看片 | 天堂中文字幕在线观看 | 碰在线视频 | 亚洲精品20p | 致单身男女免费观看完整版 | 黄页网站在线播放 | 国产传媒av在线 | 激情六月综合 | 开心六月婷婷 | 国产色视频 | 99re伊人| 日韩一区三区 | 91偷拍精品一区二区三区 | 国产91精品一区二区麻豆亚洲 | 中文字幕69页 | ass亚洲尤物裸体pics | 三级在线看中文字幕完整版 | 一区二区三区日韩精品 | 亚洲一区二区精品在线观看 | av在线播放一区二区三区 | 7m精品福利视频导航 | 国产欧美精品一区二区三区app | 风韵丰满熟妇啪啪区老熟熟女 | 中文字幕有码无码人妻av蜜桃 | 曰韩在线| 国产成人+综合亚洲+天堂 | 一区二区一级片 | 欧美乱妇一区二区三区 | 日韩免费在线视频 | 99小视频 | wwwa级片| 男人和女人做爽爽视频 | 一区二区三区四区精品视频 | aaa级片 | 成人毛片一区二区三区 | 欧美色xxxxx 日本精品一区二区三区四区的功能 | 日日摸夜夜 | 爱情岛亚洲品质自拍极速福利网站 | wwwxxx在线 | 色戒av| 中文字幕在线观看免费视频 | 淫视频在线观看 | 伊人成综合网 | 进去里视频在线观看 | 亚洲成人一二三区 | 无码精品a∨在线观看中文 福利片av | 根深蒂固在线观看 | 鲁一鲁在线视频 | 成人性生交大片免费卡看 | 一级黄色片免费看 | 99精品欧美一区二区蜜桃免费 | 国产精品久久久久久久久久小说 | 2023天天操 | 综合久久久久 | 中文字幕日韩欧美一区二区三区 | 法国空姐在线观看免费 | 青青91| 欧美成人综合网站 | 长腿校花无力呻吟娇喘的视频 | 三级在线看中文字幕完整版 |