蜜桃精品成人影片_99热在线精品免费_日韩亚洲中字无码一区二区三区_亚洲中文字幕久久精品无码一区

您現(xiàn)在所在的位置:首頁(yè) >學(xué)習(xí)資源 > Unity游戲/VR/AR入門(mén)教材 > VR開(kāi)發(fā)入門(mén)教程36:控制臺(tái)編程--異常之自定義異常

VR開(kāi)發(fā)入門(mén)教程36:控制臺(tái)編程--異常之自定義異常

來(lái)源:奇酷教育 發(fā)表于:

一定會(huì)執(zhí)行的程序塊---finally異常處理的統(tǒng)一出口try { 常規(guī)的代碼;}catch(){ 處理異常 }finally { 不論發(fā)生什么異常(或者不發(fā)生任

一定會(huì)執(zhí)行的程序塊---finally

異常處理的統(tǒng)一出口
try {
 //常規(guī)的代碼;
}
catch()
{ //處理異常 }
finally {
 //不論發(fā)生什么異常(或者不發(fā)生任何異常),都要執(zhí)行的部分;
}
finally:
     1.捕獲例外的最后一步是通過(guò)finally語(yǔ)句為例外處理提供一個(gè)統(tǒng)一的出口,使得在控制流程轉(zhuǎn)到程序的其他部分以前,能夠?qū)Τ绦虻臓顟B(tài)作統(tǒng)一的管理。
     2.無(wú)論try所指定的程序塊中是否拋出例外,也無(wú)論catch語(yǔ)句的例外類型是否與所拋棄的例外的類型一致,finally所指定的代碼都要被執(zhí)行,它提供了統(tǒng)一的出口。(finally語(yǔ)句與switch中的default語(yǔ)句是不同的?。?br />      3.通常在finally語(yǔ)句中可以進(jìn)行資源的清除工作,如關(guān)閉打開(kāi)的文件、刪除臨時(shí)文件等。
 
finally和return的關(guān)系:
1.當(dāng)try和catch中有return時(shí),finally仍然會(huì)執(zhí)行;
2.finally是在return后面的表達(dá)式運(yùn)算后執(zhí)行的(此時(shí)并沒(méi)有返回運(yùn)算后的值,而是先把要返回的值保存起來(lái),不管finally中的代碼如何修改,返回的值都不會(huì)改變,仍然是之前保存的值),所以函數(shù)返回值是在finally執(zhí)行前確定的;
3.finally中不可以有return,否則語(yǔ)法錯(cuò)誤
throw ExceptionObj;
拋出異常
首先拋出異常不是出錯(cuò)產(chǎn)生,而是人為地拋出
 
1.任何從Exception派生的類都可以用throw語(yǔ)句拋出,拋出例外用來(lái)表明程序遇到的錯(cuò)誤無(wú)法正常執(zhí)行而需要例外處理
throw new MyException(“some infomation”);
2.例外拋出點(diǎn)后的代碼在拋出例外后不再執(zhí)行
也可以說(shuō)例外的拋出終止了代碼段的執(zhí)行

自定義異常

不是由系統(tǒng)監(jiān)測(cè)到的異常(下標(biāo)越界,被0-除等),而是由用戶自己定義的異常.
用戶定義的異常同樣要用try--catch捕獲,但必須由用戶自己拋出 throw new MyException.
異常是一個(gè)類,用戶定義的異常必須繼承自SystemException或ApplicationException類,建議ApplicationException類.
 
形如:
class MyException : ApplicationException
{….}
 
例:
計(jì)算兩個(gè)數(shù)之和,當(dāng)任意一個(gè)數(shù)超出范圍時(shí),拋出自己的異常
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);
}

總結(jié)

1.一般格式:正常程序和出錯(cuò)處理分離開(kāi)來(lái)
try { C# statement;
}catch(ExceptionType1 ExceptionObject) {
   Exception1  handling;
} catch(ExceptionType2 ExceptionObject) {
   Exception2  handling;
}….
}finally {
   final handling;
 //  (統(tǒng)一的出口,最終必定要執(zhí)行)
}}
2.把異常傳播給堆棧,沿著被調(diào)用的順序往前尋找,只要找到符合該異常種類徹底異常處理程序,就交給這部分程序去處理
3.異??梢匀藶榈貟伋?用throw new 語(yǔ)句
5.異??梢允窍到y(tǒng)已經(jīng)定義好的,也可以是用戶自己定義的
5.用戶自己定義的異常一定繼承自Exception類 一般繼承自ApplicationException
景泰县| 彭水| 陆良县| 长宁县| 灵石县| 洛南县| 绍兴县| 沁水县| 盐津县| 伊宁市| 黑龙江省| 浠水县| 邯郸县| 建瓯市| 大悟县| 平罗县| 二连浩特市| 浦江县| 龙胜| 灌南县| 温宿县| 偃师市| 郑州市| 尉犁县| 娱乐| 高安市| 宾阳县| 扶绥县| 江华| 赤水市| 井陉县| 沈阳市| 姚安县| 左权县| 靖远县| 乌审旗| 宁蒗| 镇康县| 定兴县| 辉县市| 称多县|