MST

星途 面试题库

面试题:C#中异常处理的常见方式及区别

请阐述在C#中使用try - catch - finally语句进行异常处理时,catch块不同参数类型(如具体异常类型、Exception基类等)的使用场景及它们之间的区别。同时说明finally块的作用及执行时机。
19.6万 热度难度
编程语言C#

知识考点

AI 面试

面试题答案

一键面试

catch块不同参数类型的使用场景及区别

  1. 具体异常类型
    • 使用场景:当你确切知道可能会抛出哪种特定类型的异常,并且希望针对该特定异常进行定制化处理时使用。例如,在读取文件时,可能会抛出FileNotFoundException,如果只想处理文件不存在的情况,就可以捕获这个具体异常。
    • 优点:可以精确地处理特定类型的异常,避免对其他无关异常进行不必要的处理,代码逻辑更清晰。
    • 缺点:只能捕获特定类型的异常,如果出现其他类型异常,该catch块不会生效。
  2. Exception基类
    • 使用场景:用于捕获所有类型的异常,通常作为兜底的catch块。当不确定会抛出哪些具体类型的异常,或者希望对所有异常进行统一的基本处理(如记录日志)时使用。
    • 优点:可以捕获任何类型的异常,确保程序不会因为未处理的异常而崩溃。
    • 缺点:可能会掩盖具体异常的细节,因为所有异常都被统一处理,难以针对不同异常进行精细化操作。同时,如果在捕获Exception之前没有捕获具体异常,可能会导致一些特定异常的处理逻辑被忽略。

finally块的作用及执行时机

  1. 作用finally块用于放置无论是否发生异常都必须执行的代码。例如,关闭文件句柄、释放数据库连接等资源清理操作。
  2. 执行时机
    • 无异常情况:当try块中的代码正常执行完毕,在离开try块后,会立即执行finally块中的代码。
    • 有异常情况:如果try块中抛出异常,并且有匹配的catch块捕获到该异常,在catch块执行完毕后,会执行finally块中的代码。如果没有匹配的catch块,在异常向上层传递之前,也会先执行finally块中的代码。