面试题答案
一键面试catch块不同参数类型的使用场景及区别
- 具体异常类型
- 使用场景:当你确切知道可能会抛出哪种特定类型的异常,并且希望针对该特定异常进行定制化处理时使用。例如,在读取文件时,可能会抛出
FileNotFoundException
,如果只想处理文件不存在的情况,就可以捕获这个具体异常。 - 优点:可以精确地处理特定类型的异常,避免对其他无关异常进行不必要的处理,代码逻辑更清晰。
- 缺点:只能捕获特定类型的异常,如果出现其他类型异常,该
catch
块不会生效。
- 使用场景:当你确切知道可能会抛出哪种特定类型的异常,并且希望针对该特定异常进行定制化处理时使用。例如,在读取文件时,可能会抛出
- Exception基类
- 使用场景:用于捕获所有类型的异常,通常作为兜底的
catch
块。当不确定会抛出哪些具体类型的异常,或者希望对所有异常进行统一的基本处理(如记录日志)时使用。 - 优点:可以捕获任何类型的异常,确保程序不会因为未处理的异常而崩溃。
- 缺点:可能会掩盖具体异常的细节,因为所有异常都被统一处理,难以针对不同异常进行精细化操作。同时,如果在捕获
Exception
之前没有捕获具体异常,可能会导致一些特定异常的处理逻辑被忽略。
- 使用场景:用于捕获所有类型的异常,通常作为兜底的
finally块的作用及执行时机
- 作用:
finally
块用于放置无论是否发生异常都必须执行的代码。例如,关闭文件句柄、释放数据库连接等资源清理操作。 - 执行时机:
- 无异常情况:当
try
块中的代码正常执行完毕,在离开try
块后,会立即执行finally
块中的代码。 - 有异常情况:如果
try
块中抛出异常,并且有匹配的catch
块捕获到该异常,在catch
块执行完毕后,会执行finally
块中的代码。如果没有匹配的catch
块,在异常向上层传递之前,也会先执行finally
块中的代码。
- 无异常情况:当