面试题答案
一键面试-
执行逻辑:
try
块中放置可能会抛出异常的代码。当try
块中的代码执行时,如果没有异常抛出,try
块中的代码会正常执行完毕,然后跳过catch
块,执行finally
块(如果存在)。- 如果
try
块中的代码抛出异常,会立即停止执行try
块中剩余的代码,然后寻找匹配的catch
块。如果找到匹配的catch
块,就执行catch
块中的代码,之后执行finally
块(如果存在)。 - 如果没有找到匹配的
catch
块,异常会继续向上层调用栈传播,直到被捕获或者导致程序崩溃。
-
捕获特定类型异常示例:
fun main() {
try {
val number = "abc".toInt()// 这行代码会抛出NumberFormatException异常
println("转换后的数字: $number")
} catch (e: NumberFormatException) {
println("捕获到数字格式异常: ${e.message}")
}
}
在上述代码中,try
块中尝试将字符串"abc"
转换为整数,这会抛出NumberFormatException
异常。catch
块捕获了这种特定类型的异常,并打印出异常信息。
finally
块的作用:finally
块中的代码无论try
块中是否抛出异常,也无论catch
块是否捕获到异常,都会执行。例如:
fun main() {
try {
val number = "123".toInt()
println("转换后的数字: $number")
} catch (e: NumberFormatException) {
println("捕获到数字格式异常: ${e.message}")
} finally {
println("这是finally块,总会执行")
}
}
在这个例子中,无论try
块中的代码是否成功执行,finally
块中的代码“这是finally块,总会执行”都会被打印出来。通常finally
块用于释放资源,比如关闭文件、数据库连接等操作,确保资源在代码执行结束时都能正确释放。