国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C#中try...catch的使用與常見面試題分享

2019-10-29 21:13:02
字體:
來源:轉載
供稿:網友

cuz/19600.html">color: #ff0000">前言

C#中Try-Catch語句大家都很熟悉了,但是細究起來,還是有很多東西可講的。最近在翻看之前總結的常見面試題中,發現關于try...catch異常處理的還是蠻多了,今天看到這個面試題,也就重新學習一下。

try..catch語法

 try-catch語句由一個try塊后跟一個或多個catch子句構成,這些子句制定不同的異常處理程序。

引發異常時,公共語言運行時(CLR)會查找處理此異常的catch語句。如果當前執行的方法不包含這樣的catch塊,則CLR會查看調用當前方法的方法,然后會遍歷疊用堆棧。如果找不到catch塊,則CLR會向用戶顯示一天有關未處理的異常的消息并停止執行程序。

try塊包含可能導致異常的保護代碼。該塊一直執行到引發異常或成功完成為止。

class Program {  static void Main(string[] args)  {   object o = null;   try   {    //強制轉換 null 對象的嘗試引發 NullReferenceException 異常    int i = (int)o;   }   catch (NullReferenceException ex)   //1.雖然可以使用不帶參數的 catch 子句捕捉任何類型的異常,但不推薦這種用法。 通常,您應該只捕捉那些您知道如何從中恢復的異常。 因此,應該總是指定一個從 System.Exception 派生的對象參數。   //2.在同一個 try-catch 語句中可以使用一個以上的特定 catch 子句。 這種情況下 catch 子句的順序很重要,因為會按順序檢查 catch 子句。 將先捕獲特定程度較高的異常,而不是特定程度較小的異常。 如果對 catch 塊進行排序以使永遠不能達到后面的塊,編譯器將產生錯誤。   //3. int i = (int)o; 很有可能引發NullReferenceException異常,所以將此catch放在前面   //4.如果將catch (Exception ex)放在第一個,將不會達到后面的塊,編譯器將產生錯誤。   {    Console.WriteLine(ex.Message);   }   catch (DivideByZeroException div)   {    Console.WriteLine(div.Message);   }   catch (Exception ex)   {    Console.WriteLine(ex.Message);   }   Console.Read();  }

try-catch的基本語法如上面所述,try-catch的執行順序是:try塊中的代碼執行出現異常將執行catch塊中的代碼,如果try塊中的執行沒有錯誤,將try塊中的代碼執行完,不會執行catch塊中的語句。

try-catch-finally:不管是否有異常,finally塊中的代碼都會執行,finally塊常用于資源的釋放等。

try-catch的筆試題

第一種:值類型的

static int GetResult()  {   int a = 1;   int b = 2;   int n = 1;   try   {    int k = a / b;    return n;   }   catch (Exception ex)   {    Console.WriteLine(ex.Message);    throw;   }   finally//不管有沒有發生異常 finally都會執行   {    n++;   }  }

可能你已經知道結果了:1,為什么呢?咱們可以看看反編譯的代碼,你就會清楚為什么了。

c,try,catch,用法,catch的使用

第二種:引用類型的

static Person GetResult()  {   int a = 1;   int b = 2;   Person p = new Person();   p.Age = 1;   try   {    int k = a / b;    return p;   }   catch (Exception ex)   {    Console.WriteLine(ex.Message);    throw;   }   finally//不管有沒有發生異常 finally都會執行   {    p.Age++;   }  }

那么返回的這個person的age是多少呢?先看反編譯的結果:

c,try,catch,用法,catch的使用

結果為:2

總結

這個題考察還是try-catch-finally的執行順序,以及引用類型和值類型,這里總結這個,只是換個角度重新學習一下。

好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到c#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 隆尧县| 广宗县| 正宁县| 深水埗区| 绥棱县| 常熟市| 嵊州市| 于田县| 定襄县| 富蕴县| 锡林浩特市| 都安| 大邑县| 南通市| 长泰县| 建平县| 息烽县| 怀集县| 利津县| 天津市| 屏山县| 富蕴县| 台中县| 延庆县| 乌审旗| 乌海市| 苏州市| 宝清县| 宿迁市| 隆尧县| 海原县| 惠来县| 民县| 东乌珠穆沁旗| 盐亭县| 柏乡县| 桃园县| 盐亭县| 锦屏县| 桂林市| 运城市|