MST

星途 面试题库

面试题:Kotlin自定义异常及异常传播

在Kotlin中,如何自定义一个异常类?阐述异常在函数调用链中传播的规则,并举例说明如何通过`throw`关键字抛出自定义异常,以及在调用栈中如何处理这种异常。
38.5万 热度难度
编程语言Kotlin

知识考点

AI 面试

面试题答案

一键面试

自定义异常类

在Kotlin中,自定义异常类需要继承Exception类或它的子类。例如:

class MyCustomException : Exception()

也可以给异常类添加构造函数参数,以便在抛出异常时传递更多信息:

class MyCustomException(message: String) : Exception(message)

异常在函数调用链中传播的规则

  1. 向上传播:当函数中抛出一个异常时,如果该函数没有捕获(try - catch)这个异常,它会向上传播到调用该函数的地方。如果调用函数也没有捕获,异常会继续向上传播,直到被捕获或者到达程序的最顶层(此时程序会终止并打印异常堆栈信息)。
  2. 按类型匹配:异常是按照类型匹配捕获的。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块中处理异常。