程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> [c#基礎]關於try...catch最常見的筆試題

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

編輯:C#入門知識

引言 在翻看之前總結的常見面試題中,關於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         }

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved