面试题答案
一键面试自定义异常类
在Kotlin中,自定义异常类需要继承Exception
类或它的子类。例如:
class MyCustomException : Exception()
也可以给异常类添加构造函数参数,以便在抛出异常时传递更多信息:
class MyCustomException(message: String) : Exception(message)
异常在函数调用链中传播的规则
- 向上传播:当函数中抛出一个异常时,如果该函数没有捕获(
try - catch
)这个异常,它会向上传播到调用该函数的地方。如果调用函数也没有捕获,异常会继续向上传播,直到被捕获或者到达程序的最顶层(此时程序会终止并打印异常堆栈信息)。 - 按类型匹配:异常是按照类型匹配捕获的。
catch
块会捕获与它声明的异常类型相同或其子类型的异常。
抛出自定义异常
使用throw
关键字抛出自定义异常。例如:
fun someFunction() {
val condition = false
if (!condition) {
throw MyCustomException("自定义异常被抛出,因为条件不满足")
}
}
处理自定义异常
在调用栈中处理自定义异常可以使用try - catch
块。例如:
fun main() {
try {
someFunction()
} catch (e: MyCustomException) {
println("捕获到自定义异常: ${e.message}")
}
}
在上述代码中,someFunction
函数可能会抛出MyCustomException
异常,main
函数通过try - catch
块捕获并处理这个异常。如果someFunction
函数没有抛出异常,try
块中的代码会正常执行完毕,catch
块不会执行。如果抛出了异常,程序流程会立即跳转到catch
块中处理异常。