国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

輕松學(xué)習(xí)C#的異常處理

2020-01-24 01:21:19
字體:
供稿:網(wǎng)友

       異常是程序運(yùn)行中發(fā)生的錯(cuò)誤,異常處理是程序設(shè)計(jì)的一部分。錯(cuò)誤的出現(xiàn)并不總是編寫應(yīng)用程序者的原因,有時(shí)候應(yīng)用程序會(huì)因?yàn)榻K端用戶的操作發(fā)生錯(cuò)誤。無論如何,在編寫程序前,都應(yīng)該預(yù)測應(yīng)用程序和代碼中出現(xiàn)的錯(cuò)誤。一般良好的編程規(guī)范也會(huì)避免一些不必要的程序錯(cuò)誤的出現(xiàn)。
        在項(xiàng)目的開發(fā)過程中,并不是所有的代碼執(zhí)行都和想象那樣理想,總是避免不了異常的發(fā)生。這就需要編程語言的去處理這些異常,C#語言中有三種異常處理語句:
        try...catch;//處理異常
        try...finally;//清楚異常
        try...catch...finally;//處理所有異常
一、用try...catch語句捕獲異常
        在try語句中包含容易產(chǎn)生異常的代碼,接著捕獲異常,catch段里的代碼會(huì)注意進(jìn)行適當(dāng)?shù)奶幚恚?br />格式為:
        try
        {
        }
        catch(異常類  異常對象實(shí)例)
        {
        }
例一:用上述的語句捕獲訪問整型數(shù)組nums時(shí)產(chǎn)生索引越界異常,并提示給用戶:

<span style="font-size:18px;">using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;  namespace Text {  class Program  {   static void Main(string[] args)   {    int[] nums = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };    try//捕獲異常    {     for (int i = 0; i <= nums.Length; i++)//遍歷數(shù)組所有元素     {      Console.Write(nums[i] + " ");     }    }    catch (Exception a)//訪問異常對象    {     Console.Write(a.Message);//輸出異常錯(cuò)誤    }     Console.WriteLine();     Console.ReadLine();   }   } }</span> 

輸出的結(jié)果為:

 

       由于數(shù)據(jù)元素的索引是從0開始的,for語句遍歷數(shù)組元素時(shí),用了“小于或等于”,正好多遍歷一次,所以出現(xiàn)索引越界。
二、清除與處理所有異常
        如果用戶對產(chǎn)生的錯(cuò)誤不進(jìn)行處理,而清除產(chǎn)生的錯(cuò)誤分配的資源,那么可以使用try...finally語句來完成,這里的finally塊用于清除try塊中分配的任何資源以及運(yùn)行任何即使在發(fā)生異常時(shí)也必須執(zhí)行的帶代碼。格式為:
         try
        {
        }
        catch(異常類  異常對象實(shí)例)
        {
        }
        finally
        {
        }
        這個(gè)組合是處理所有異常最好的,它合并前面兩種錯(cuò)誤處理技術(shù),即捕獲錯(cuò)誤,清除并繼續(xù)執(zhí)行應(yīng)用程序。
例二:用240去除這個(gè)數(shù)組中的各元素,由于數(shù)組中的元素值有0,所以會(huì)產(chǎn)生處數(shù)據(jù)為0的錯(cuò)誤。

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;  namespace Text {  class Program  {   static void Main(string[] args)   {    int[] nums = { 4,8,12,0,10 };    try//捕獲異常    {     for (int i = 0; i < nums.Length; i++)     {      int valude = 0;      valude = 240 / nums[i];      Console.WriteLine("240/{0}={1}", nums[i], valude);     }    }    catch (Exception a)//訪問異常對象    {     Console.WriteLine(a.Message);//輸出異常錯(cuò)誤    }    finally    {     Console.WriteLine("有沒有異常我都會(huì)運(yùn)行");    }     Console.WriteLine();     Console.ReadLine();   }   } } 

        輸出的結(jié)果為:

三、引發(fā)異常
        在編寫程序時(shí),有時(shí)可能要引發(fā)異常,以便捕獲異常。引發(fā)異常是通過throw語句和一個(gè)適當(dāng)?shù)漠惓n悂韺?shí)現(xiàn)的。其格式為:
        throw  new  異常類(異常描述);
        異常類可以是C#語言類庫中提供的異常類,也可以是自定義異常類。異常描述為可選擇項(xiàng),用來描述產(chǎn)生異常錯(cuò)誤,可產(chǎn)生異常時(shí)捕獲到以便快速找到產(chǎn)生錯(cuò)誤的代碼。
例三:將字符串轉(zhuǎn)換為整數(shù)的異常

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;  namespace Text {  class Program  {   static void Main(string[] args)   {    string str = "string";    try    {     int returnInt;     returnInt = Program.ConvertStringToInt(str);//調(diào)用轉(zhuǎn)換     Console.Write(returnInt);    }    catch (FormatException a)    {     Console.WriteLine(a.Message);    }    Console.ReadLine();   }   private static int ConvertStringToInt(string str)//定義轉(zhuǎn)換函數(shù)   {    int intNum = 0;    try    {     intNum = Convert.ToInt32(str);     return intNum;    }    catch    {     throw new FormatException("轉(zhuǎn)換錯(cuò)誤");//引發(fā)異常    }   }   } } 

輸出的結(jié)果為:

四、自定義異常類
          C#語言雖然預(yù)定義了許多異常類,但是,在有些場合,創(chuàng)建自己的異常類可能會(huì)方便。自定義異常類是通過繼承System.Exception類來創(chuàng)建自己的異常類。其步驟是:
(1)聲明一個(gè)異常,格式如下:class  異常類名:Exception{ }
(2)引發(fā)自己的異常,格式如下: throw(ExceptionName);
 例四:定義一個(gè)異常類MyException,然后引發(fā)這個(gè)異常類。

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;  namespace Text {  class MyException : SystemException { }//聲明異常  class Program  {   static void Main(string[] args)   {    try    {     Console.WriteLine("引發(fā)異常前我是被執(zhí)行的");//引發(fā)異常前的提示     throw new MyException();     Console.WriteLine("因?yàn)橐呀?jīng)引發(fā)異常,所以我不能被執(zhí)行");    }    catch (MyException)    {     Console.WriteLine("引發(fā)異常");    }     Console.ReadLine();   }   } } 

輸出的結(jié)果為:

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 呼玛县| 屏南县| 绥棱县| 揭西县| 连江县| 内乡县| 永清县| 卢氏县| 平原县| 萨嘎县| 乌拉特中旗| 勃利县| 防城港市| 南安市| 罗源县| 铜陵市| 晋城| 会同县| 称多县| 瓮安县| 宜春市| 大石桥市| 英吉沙县| 普洱| 苏尼特左旗| 平邑县| 丁青县| 岳阳市| 始兴县| 凌云县| 姚安县| 大埔县| 昌乐县| 磐安县| 抚松县| 龙游县| 镇雄县| 长治市| 兰西县| 温泉县| 正宁县|