C#中try...catch的使用与常见面试题分享

 更新时间:2017年02月28日 09:35:48   作者:wolfy  
这篇文章首先给大家介绍了关于C#中try...catch的语法,而后又给大家分享了关于C#中try...catch最常见的面试题,具有一定的参考借鉴价值,需要的朋友们下面来一起看看吧。

前言

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,为什么呢?咱们可以看看反编译的代码,你就会清楚为什么了。

第二种:引用类型的

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是多少呢?先看反编译的结果:

结果为:2

总结

这个题考察还是try-catch-finally的执行顺序,以及引用类型和值类型,这里总结这个,只是换个角度重新学习一下。

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • C#使用Word中的内置对话框实例

    C#使用Word中的内置对话框实例

    这篇文章主要介绍了C#使用Word中的内置对话框实例,包括了对话框的显示方法及后期绑定具体用法,需要的朋友可以参考下
    2014-10-10
  • C# Winform实现截图工具的示例代码

    C# Winform实现截图工具的示例代码

    这篇文章主要为大家详细介绍了如何使用C# Winform制作一个简单的截图工具,从而实现截图功能,文中的示例代码讲解详细,有需要的可以参考下
    2024-02-02
  • C#实现自动识别URL网址的方法

    C#实现自动识别URL网址的方法

    这篇文章主要介绍了C#实现自动识别URL网址的方法,涉及C#操作URL地址的相关技巧,需要的朋友可以参考下
    2015-05-05
  • C#操作Access数据库的实现过程(vs2019)

    C#操作Access数据库的实现过程(vs2019)

    这篇文章主要介绍了C#操作Access数据库的实现过程(vs2019),打开Office Access新建一个空白数据库DATA.accdb,并改好存放位置,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-02-02
  • c#编写webservice服务引用实例分享

    c#编写webservice服务引用实例分享

    c#编写webservice服务引用实例分享,大家参考使用吧
    2013-12-12
  • C#使用for循环移除HTML标记

    C#使用for循环移除HTML标记

    大家在项目开发阶段移除文字中的html标记最常用的方法就是使用正则表达式,但是正则表达式不能处理所有的html文档,所以采用迭代方式会更好,下面小编给大家解答下
    2016-08-08
  • C#命令行参数解析库System.CommandLine使用

    C#命令行参数解析库System.CommandLine使用

    System.CommandLine是一个基于.Net Standard 2.0的命令行参数解析库,该项目还是属于beta状态,期待以后的正式版本,文章通过示例代码给大家介绍了System.CommandLine使用讲解,感兴趣的朋友一起看看吧
    2021-06-06
  • WPF实现在线预览和显示Word和PDF文件

    WPF实现在线预览和显示Word和PDF文件

    这篇文章主要为大家详细介绍了如何使用WPF实现在线预览和显示Word和PDF文件,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-02-02
  • C# WinForm制作登录界面的实现步骤

    C# WinForm制作登录界面的实现步骤

    本文主要介绍了C# WinForm制作登录界面的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • C# 获取程序集版本、文件版本

    C# 获取程序集版本、文件版本

    C# 获取程序集版本、文件版本的实现代码。
    2009-09-09

最新评论