• <i id="lhqfs"></i>
    <source id="lhqfs"></source>
  • <cite id="lhqfs"></cite>

    <rp id="lhqfs"></rp>
  • <rt id="lhqfs"></rt>
    您現在所在的位置:首頁 >學習資源 > Unity游戲/VR/AR入門教材 > VR開發入門教程36:控制臺編程--異常之自定義異常

    VR開發入門教程36:控制臺編程--異常之自定義異常

    來源:奇酷教育 發表于:

    一定會執行的程序塊---finally異常處理的統一出口try { 常規的代碼;}catch(){ 處理異常 }finally { 不論發生什么異常(或者不發生任

    一定會執行的程序塊---finally

    異常處理的統一出口
    try {
     //常規的代碼;
    }
    catch()
    { //處理異常 }
    finally {
     //不論發生什么異常(或者不發生任何異常),都要執行的部分;
    }
    finally:
         1.捕獲例外的最后一步是通過finally語句為例外處理提供一個統一的出口,使得在控制流程轉到程序的其他部分以前,能夠對程序的狀態作統一的管理。
         2.無論try所指定的程序塊中是否拋出例外,也無論catch語句的例外類型是否與所拋棄的例外的類型一致,finally所指定的代碼都要被執行,它提供了統一的出口。(finally語句與switch中的default語句是不同的?。?br />      3.通常在finally語句中可以進行資源的清除工作,如關閉打開的文件、刪除臨時文件等。
     
    finally和return的關系:
    1.當try和catch中有return時,finally仍然會執行;
    2.finally是在return后面的表達式運算后執行的(此時并沒有返回運算后的值,而是先把要返回的值保存起來,不管finally中的代碼如何修改,返回的值都不會改變,仍然是之前保存的值),所以函數返回值是在finally執行前確定的;
    3.finally中不可以有return,否則語法錯誤
    throw ExceptionObj;
    拋出異常
    首先拋出異常不是出錯產生,而是人為地拋出
     
    1.任何從Exception派生的類都可以用throw語句拋出,拋出例外用來表明程序遇到的錯誤無法正常執行而需要例外處理
    throw new MyException(“some infomation”);
    2.例外拋出點后的代碼在拋出例外后不再執行
    也可以說例外的拋出終止了代碼段的執行

    自定義異常

    不是由系統監測到的異常(下標越界,被0-除等),而是由用戶自己定義的異常.
    用戶定義的異常同樣要用try--catch捕獲,但必須由用戶自己拋出 throw new MyException.
    異常是一個類,用戶定義的異常必須繼承自SystemException或ApplicationException類,建議ApplicationException類.
     
    形如:
    class MyException : ApplicationException
    {….}
     
    例:
    計算兩個數之和,當任意一個數超出范圍時,拋出自己的異常
    public class NumberRangeException : ApplicationException
    {  public NumberRangeException(String msg):base(msg)
       { }
    }
     
    public int CalcAnswer(String str1, String str2)
    {
        int int1, int2;
        int answer = -1;
        try
        {
             int1 = int.Parse(str1);
             int2 = int.Parse(str2);
             if( (int1 < 10) || (int1 > 20)|| (int2 < 10) || (int2 > 20)))
             {
                   NumberRangeException e = new NumberRangeException
                       ("Numbers not within the specified range.");
                   throw e;
             }
             answer = int1 + int2;
        }catch (FormatException e){
          Console.WriteLine(e);
        }
        return answer;
    }
    public void GetAnswer()
    {
       String answerStr;
       try
       {
            int answer = CalcAnswer(“12”, “5”);
       }catch (NumberRangeException e){
            answerStr = e.Message;
       }
       Console.WriteLine(answerStr);
    }

    總結

    1.一般格式:正常程序和出錯處理分離開來
    try { C# statement;
    }catch(ExceptionType1 ExceptionObject) {
       Exception1  handling;
    } catch(ExceptionType2 ExceptionObject) {
       Exception2  handling;
    }….
    }finally {
       final handling;
     //  (統一的出口,最終必定要執行)
    }}
    2.把異常傳播給堆棧,沿著被調用的順序往前尋找,只要找到符合該異常種類徹底異常處理程序,就交給這部分程序去處理
    3.異??梢匀藶榈貟伋?用throw new 語句
    5.異??梢允窍到y已經定義好的,也可以是用戶自己定義的
    5.用戶自己定義的異常一定繼承自Exception類 一般繼承自ApplicationException
    老女人老肥熟国产在线视频_亚洲av无限制福利在线_亚洲第一天堂国产丝袜熟女_免费好看的国产精品