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

首頁 > 學院 > 開發設計 > 正文

[c#基礎]關于try...catch最常見的筆試題

2019-11-17 03:21:25
字體:
來源:轉載
供稿:網友

[c#基礎]關于try...catch最常見的筆試題

引言

在翻看之前總結的常見面試題中,關于try...catch異常處理的還是蠻多了,今天看到這個面試題,也就重新學習一下。

try..catch語法

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

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

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

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

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

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

try-catch的筆試題

第一種:值類型的

 1         static int GetResult() 2         { 3             int a = 1; 4             int b = 2; 5             int n = 1; 6             try 7             { 8                 int k = a / b; 9                 return n;10             }11             catch (Exception ex)12             {13 14                 Console.WriteLine(ex.Message);15                 throw;16             }17             finally//不管有沒有發生異常 finally都會執行18             {19                 n++;20             }21         }

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

第二種:引用類型的

 1 static Person GetResult() 2         { 3             int a = 1; 4             int b = 2; 5             Person p = new Person(); 6             p.Age = 1; 7             try 8             { 9                 int k = a / b;10                 return p;11             }12             catch (Exception ex)13             {14 15                 Console.WriteLine(ex.Message);16                 throw;17             }18             finally//不管有沒有發生異常 finally都會執行19             {20                 p.Age++;21             }22         }

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

結果為:2

總結

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阿拉善盟| 托克托县| 海林市| 新宁县| 赤峰市| 南郑县| 荥经县| 茌平县| 读书| 栾川县| 汝城县| 德保县| 祁门县| 静安区| 当涂县| 临城县| 城口县| 安福县| 永吉县| 大邑县| 灌阳县| 兰溪市| 龙泉市| 鹿邑县| 三原县| 界首市| 石城县| 阳信县| 增城市| 和田市| 玛纳斯县| 瓦房店市| 郸城县| 麟游县| 南川市| 浮山县| 汶川县| 夏邑县| 遂宁市| 上蔡县| 江阴市|