C#回顧學習筆記二十二:異常與try-catch的使用

假設有這麼一段代碼:
class Program
    {
        static void Main(string[] args)
        {
            string s = "abc";
            int num = Convert.ToInt32(s);
            Console.ReadKey();
        }
    }
這樣的代碼在VS編譯生成解決方案時完全不會報任何錯誤,但運行後可以看到發生了一個異常信息警告:其他信息: 輸入字符串的格式不正確。這就是一個異常信息。
異常的概念、特點和注意事項:
1.異常發生在程序發生的不正常情況下。異常是以一個異常類對象的形式拋出,包括異常信息、發生的位置等。
2.異常的父類都是Exception類,異常類一般都繼承自Exception類。
3.異常可以人爲地拋出,方便程序員進行異常處理。拋出異常並不意味着可以放任不管,如果拋出異常應該首先想到如何去解決這個異常,讓代碼變正常。人爲拋出異常可以這麼做:
class Program
    {
        static void Main(string[] args)
        {
            string s = "abc";
            if (s == "abc")
            {
                //在認爲可能出現異常的地方人爲拋出異常
                throw new Exception("變量s的值包含了字母,並不能轉成int類型");
            }
            int num = Convert.ToInt32(s);
            Console.ReadKey();
        }
    }
4.如果在出現異常時不想像上面代碼那樣讓程序停在中途,可以使用try-catch來處理異常信息。詳細代碼如下:
class Program
    {
        static void Main(string[] args)
        {
            string s = "abc";
            try
            {
                int num = Convert.ToInt32(s);
            }
            catch (Exception ex)
            {
                Console.WriteLine("變量s可能不是純數字,因此無法轉換,詳細錯誤信息:{0}", ex.Message);
            }
            Console.ReadKey();
        }
    }
在上面的代碼中,try結構內的代碼表示認爲可能會出現異常的代碼,catch結構則表示如果try結構內的代碼執行發生異常,將馬上跳轉到catch中執行代碼。也就是說try內的代碼只要出現異常,那麼try後面的代碼都不會執行,而是直接跳轉到catch裏執行代碼。這樣就算出現異常信息,也不會讓程序卡在中途,而是繼續執行完程序,並因爲Exception聲明的對象ex,可以在屏幕上輸出異常的詳細錯誤信息,這時候再對代碼進行bug檢查,修改並測試。
5.可以在try-catch後面接上多個catch,可以獲取到其他類型的異常,因爲Exception類是所有異常類的父類。如果知道可能會發生什麼類型異常,就是用那個特定的異常類。
6.如果不知道如何處理異常,就不要輕易用try-catch
7.還有個finally結構,總體是try-catch-finally,這樣執行try或catch後,最終都要執行finally中的代碼:
class Program
    {
        static void Main(string[] args)
        {
            string s = "abc";
            try
            {
                int num = Convert.ToInt32(s);
            }
            catch (Exception ex)
            {
                Console.WriteLine("變量s可能不是純數字,因此無法轉換,詳細錯誤信息:{0}", ex.Message);
            }
            finally
            {
                Console.WriteLine("會被執行");
            }
            Console.ReadKey();
        }
    }
總結:通常來講,如果知道怎麼處理異常才使用try-catch這樣最好。如果只是catch住異常就那麼撒手不管,還不如不寫try-catch,老老實實根據異常信息修改代碼是更好的選擇。在常見的web應用開發中,經常有日誌記錄的習慣。比如用戶在執行對網站的一個操作時引發了一個異常,這時候用try-catch代碼抓住異常,在catch內將異常的詳細信息寫入日誌文件中,讓相關工作人員好有空去查看那些異常並進行改正。這可能纔是正確使用try-catch的姿勢。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章