• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • C#異常處理機制初步

    發表于:2007-05-25來源:作者:點擊數: 標簽:異常今天初步機制學習
    今天學習了C#的異常處理機制,現將所學總結如下: 一、C#的異常處理所用到關鍵字 try 用于檢查發生的異常,并幫助發送任何可能的異常。 catch 以控制權更大的方式處理錯誤,可以有多個catch子句。 finally 無論是否引發了異常,finally的代碼塊都將被執行
    今天學習了C#的異常處理機制,現將所學總結如下:


    一、C#的異常處理所用到關鍵字


    try 用于檢查發生的異常,并幫助發送任何可能的異常。


    catch 以控制權更大的方式處理錯誤,可以有多個catch子句。


    finally 無論是否引發了異常,finally的代碼塊都將被執行。


    throw 用于引發異常,可引發預定義異常和自定義異常。


    二、C#異常處理的格式


    try


    {


    程序代碼塊;


    }


    catch(Exception e)


    {


    異常處理代碼塊;


    }


    finally


    {


    無論是否發生異常,均要執行的代碼塊;


    }



    三、異常處理實戰


    一個除數和零的簡單例子:


    public class DivisorIsZero


    {


    private static void Main()


    {


    int dividend=10;


    int divisor1=0;


    int divisor2=5;


    int DivideValue;


    try


    {


    DivideValue=dividend/divisor1; //(1)


    //DivideValue=dividend/divisor2; //(2)


    System.Console.WriteLine("DivideValue={0}",DivideValue);//(3)這一行將不會被執行。


    }


    catch


    {


    System.Console.WriteLine("傳遞過來的異常值為:{0}",e);


    }


    finally


    {


    System.Console.WriteLine("無論是否發生異常,我都會顯示。");


    }


    }


    }



    注:(1)行被執行則會拋出一個異常,如果沒有catch語句,程序會異常終止,使用不帶參數的catch子句,則可以捕獲任意類型的異常。


    如果將(1)行注釋掉,啟用(2)行,這意味該程序運行時不會出現異常,從輸出可知,finally代碼塊仍將被執行。



    可以給try語句提供多個catch語句,以捕獲特定的異常,如上例中:0作為除數則會引發DivideByZeroException類型的異常,上例中的catch語句可以作如下修改:


    catch(DivideByZeroException e)


    {


    System.Console.WriteLine("零不能作為除數!異常值為:\n{0}",e);


    }


    catch(Exception e)


    {


    System.Console.WriteLine("并非\''''零作為除數引發的異常\"!異常值為:\n{0}",e);


    }


    為什么還要加上一個catch(Exception e)子句呢?原因很簡單,catch(DivideByZeroException e)子句只能捕獲特定的異常,try內的程序代碼可能還會產生其它的異常,這些異常只能由catch(Exception e)來捕獲了。


    下表給出了一些常見的異常:



    System名稱空間中常用的異常類



    異常類名稱 簡單描述


    MemberAclearcase/" target="_blank" >ccessException 訪問錯誤:類型成員不能被訪問


    ArgumentException 參數錯誤:方法的參數無效


    ArgumentNullException 參數為空:給方法傳遞一個不可接受的空參數


    ArithmeticException 數學計算錯誤:由于數學運算導致的異常,覆蓋面廣。


    ArrayTypeMismatchException 數組類型不匹配


    DivideByZeroException 被零除


    FormatException 參數的格式不正確


    IndexOutOfRangeException 索引超出范圍,小于0或比最后一個元素的索引還大


    InvalidCastException 非法強制轉換,在顯式轉換失敗時引發


    MulticastNotSupportedException 不支持的組播:組合兩個非空委派失敗時引發


    NotSupportedException 調用的方法在類中沒有實現


    NullReferenceException 引用空引用對象時引發


    OutOfMemoryException 無法為新語句分配內存時引發,內存不足


    OverflowException 溢出


    StackOverflowException 棧溢出


    TypeInitializationException 錯誤的初始化類型:靜態構造函數有問題時引發


    NotFiniteNumberException 無限大的值:數字不合法



    四、定義自己的異常類


    除了預定義的異常外,我們還可以創建自己的異常,過程比較簡單:


    ㈠聲明一個異常,格式如下:


    class ExceptionName:Exception{}


    ㈡引發自己的異常:


    throw(ExceptionName);



    看一個例子:


    class IAmSecondGrade:System.Exception{}//聲明異常



    class SecondGrade


    {


    public static int mul(int first,int second)


    {


    if(first>100||second>100)


    throw new IAmSecondGrade();//引發異常


    return (first*second);


    }



    public static void Main()


    {


    int mul_value;


    try


    {


    mul_value=mul(99,56);


    System.Console.WriteLine("99與56積為:{0}",mul_value);


    mul_value=mul(101,4);


    System.Console.WriteLine("出現異常,這行是不會被執行的。");


    }


    catch(IAmSecondGrade)//捕獲自定義的異常


    {


    System.Console.WriteLine("我才上二年級,超過100的乘法我不會。嘿嘿,我自定義的異常。");


    }


    catch(System.Exception e)


    {


    System.Console.WriteLine("非自定義異常。其值為:{0}",e);


    }



    }


    }



    今天學習了一些異常處理的重要特性,還有許多其它的特性,有待以后努力


    原文轉自:http://www.kjueaiud.com

    評論列表(網友評論僅供網友表達個人看法,并不表明本站同意其觀點或證實其描述)
    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>