程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#各種異常處理方式,

C#各種異常處理方式,

編輯:C#入門知識

C#各種異常處理方式,


.NET的異常處理機制用來發現、處理運行時錯誤。如果開發人員沒有提供異常的處理機制,就默認采用.NET的機制。

 

通常使用try...catch...finally捕獲異常。

try
{
    //有可能發生異常
}
catch(Exception ex)
{
    //處理異常
}
finally
{
    //清理
}

○ 如果沒有異常發生,就直接到finally語句塊中。
○ finally語句塊是必須執行的
○ 這裡的catch和finally語句塊是可選的。try語句塊後面可以跟1個或多個catch語句塊,try語句塊後面可以直接跟finally語句塊。
○ Exception是所有異常的基類

 

□ 使用.NET默認異常處理機制捕獲異常

    class Program
    {
        static void Main(string[] args)
        {
            int a = 0;
            int result = 100/a;
            Console.WriteLine(result);
            Console.ReadKey();
        }
    }

 

□ 使用try...catch手動捕獲異常

    class Program
    {
        static void Main(string[] args)
        {
            int a = 0;
            int result = 0;
            try
            {
                result = 100/a;
                Console.WriteLine("這裡不會執行");
            }
            catch (DivideByZeroException exception)
            {
                Console.WriteLine("出現異常");
            }
            Console.WriteLine(result);
            Console.ReadKey();
        }
    }

 

□ 使用try...catch...finally手動捕獲異常

   class Program
    {
        static void Main(string[] args)
        {
            int a = 0;
            int result = 0;
            try
            {
                result = 100/a;
                Console.WriteLine("這裡不會執行");
            }
            catch (DivideByZeroException exception)
            {
                Console.WriteLine("出現異常");
            }
            finally
            {
                Console.WriteLine("放行吧,肯定會執行到我這裡的~~");
            }
            Console.WriteLine(result);
            Console.ReadKey();
        }
    }

可見,finally語句塊中的內容一定會被執行。

 

□ 使用try...多個catch...finally手動捕獲異常

    class Program
    {
        static void Main(string[] args)
        {
            int a = 0;
            int result = 0;
            try
            {
                result = 100/a;
                Console.WriteLine("這裡不會執行");
            }
            catch (DivideByZeroException exception)
            {
                Console.WriteLine("不能被0除的異常");
            }
            catch (Exception ex)
            {
                Console.WriteLine("異常");
            }
            finally
            {
                Console.WriteLine("放行吧,肯定會執行到我這裡的~~");
            }
            Console.WriteLine(result);
            Console.ReadKey();
        }
    }

可見,只要有一個catch語句塊捕獲到異常,其它catch語句塊不執行。

 

□ 使用try...catch(不帶括號,不帶參數)手動捕獲異常

    class Program
    {
        static void Main(string[] args)
        {
            int a = 0;
            int result = 0;
            try
            {
                result = 100/a;
                Console.WriteLine("這裡不會執行");
            }
            catch
            {
                Console.WriteLine("異常");
            }
            Console.WriteLine(result);
            Console.ReadKey();
        }
    }

通過以上方法,可以捕獲任何異常。

 

□ try...catch手動捕獲拋出的異常

    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                throw new DivideByZeroException("除數不能為零");
            }
            catch (DivideByZeroException e)
            {
                Console.WriteLine("異常");
            }
            Console.WriteLine("最後想說的");
            Console.ReadKey();
        }
    }

拋出異常本身並沒有顯示。

 

□ 較高層次上下文捕獲較低拋出的異常

   class Program
    {
        static void Main(string[] args)
        {
            Calculate c = new Calculate();
            try
            {
                c.Divide();
            }
            catch (Exception e)
            {
                Console.WriteLine("捕獲異常");
            }
            Console.WriteLine("最後想說的");
            Console.ReadKey();
        }
    }
    public class Calculate
    {
        public void Divide()
        {
            try
            {
                int a = 0;
                int result = 100/a;
            }
            catch (DivideByZeroException e)
            {
                throw;
            }
        }
    }

在Calculate內部拋出的異常,被更高層次的客戶端捕獲。

 

□ 自定義異常

   class Program
    {
        static void Main(string[] args)
        {
            try
            {
                throw new MyException("i am exception");
            }
            catch (Exception e)
            {
                Console.WriteLine("捕獲到自定義異常了~~");
            }
            Console.WriteLine("最後想說的");
            Console.ReadKey();
        }
    }
    public class MyException : Exception
    {
        public MyException(string str)
        {
            Console.WriteLine("這是我自定義的異常:" + str);
        }
    }

 

總結:
○ .NET異常處理並不是標准的try...catch...finally,可以是很靈活的。
○ 盡量在較低層次拋異常,在較高層次捕獲異常。


C語言&& || !分別是什

&是取址運算符,作用是提取一個變量的地址。
比如你定義了一個變量,那麼在編譯時,系統就會在內存中分配一個空間。
而這個空間在內存中的位置就是它的地址。&就提取它的地址。
e.g int a;在編譯時就給它分配一個地址,比如是2000;&a就是2000。
假如先定義了一個整型指針變量p,p=&a;就是把a的地址2000賦給p。運行後p=2000。
又如scanf("%d",&a);當你輸入3時,它會先根據&a知道a的地址,由地址找到a在內存中的空間,再把3寫入這個空間。
*是指針運算符,作用與&相反,它是根據變量的地址取出變量的值。
比如,*a的值就是變量a的值3。
下面是定義和聲明中用到指針的小結
int *p; 定義一個指向整型數據的指針。
int *p[n]; 定義指針數組p,它由n個指向整型數據的指針元素組成。
int (*p)[n]; p為指向含n個元素的一維數組的指針變量。
int *p(); p為返回一個指針的函數,該指針指向整型數據。
int (*p)(); p為指向函數的指針,該函數返回一個整型值
int **p; p是一個指針變量,它指向一個指向整型數據的指針變量。
如果你想系統的了解建議你可以看看譚浩強的《c程序設計》(第三版)這本書通俗易懂。是學習c語言不錯的教材。
 

C語言&& || !分別是什

&是取址運算符,作用是提取一個變量的地址。
比如你定義了一個變量,那麼在編譯時,系統就會在內存中分配一個空間。
而這個空間在內存中的位置就是它的地址。&就提取它的地址。
e.g int a;在編譯時就給它分配一個地址,比如是2000;&a就是2000。
假如先定義了一個整型指針變量p,p=&a;就是把a的地址2000賦給p。運行後p=2000。
又如scanf("%d",&a);當你輸入3時,它會先根據&a知道a的地址,由地址找到a在內存中的空間,再把3寫入這個空間。
*是指針運算符,作用與&相反,它是根據變量的地址取出變量的值。
比如,*a的值就是變量a的值3。
下面是定義和聲明中用到指針的小結
int *p; 定義一個指向整型數據的指針。
int *p[n]; 定義指針數組p,它由n個指向整型數據的指針元素組成。
int (*p)[n]; p為指向含n個元素的一維數組的指針變量。
int *p(); p為返回一個指針的函數,該指針指向整型數據。
int (*p)(); p為指向函數的指針,該函數返回一個整型值
int **p; p是一個指針變量,它指向一個指向整型數據的指針變量。
如果你想系統的了解建議你可以看看譚浩強的《c程序設計》(第三版)這本書通俗易懂。是學習c語言不錯的教材。
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved