📜  Kotlin 嵌套 try 块和多个 catch 块(1)

📅  最后修改于: 2023-12-03 15:02:32.699000             🧑  作者: Mango

Kotlin 嵌套 try 块和多个 catch 块

在 Kotlin 中,嵌套 try 块和多个 catch 块的语法与 Java 中相似。通过嵌套 try 块和多个 catch 块,开发者可以更加精确地捕获并处理各种异常情况。

嵌套 try 块

Kotlin 中嵌套 try 块的语法如下:

try {
    // try 块内的代码
    try {
        // 嵌套的 try 块内的代码
    } catch (e: Exception) {
        // 嵌套的 try 块中发生的异常
    }
} catch (e: Exception) {
    // 外层 try 块中发生的异常
}

在嵌套 try 块中,内层的 try 块将首先被执行。如果内层的 try 块中发生了异常,则该异常会被内层 catch 块捕获处理。如果内层的 try 块未发生异常,则外层的 try 块将继续执行。如果外层的 try 块中发生了异常,则该异常会被外层 catch 块捕获处理。

多个 catch 块

当一个 try 块可能会抛出不同类型的异常时,我们可以使用多个 catch 块来捕获并处理这些异常。Kotlin 中多个 catch 块的语法如下:

try {
    // try 块内的代码
} catch (e: Exception1) {
    // 处理 Exception1 异常的代码
} catch (e: Exception2) {
    // 处理 Exception2 异常的代码
} finally {
    // finally 块内的代码
}

如果 try 块中的代码抛出了 Exception1 类型的异常,则第一个 catch 块会捕获并处理该异常;如果抛出了 Exception2 类型的异常,则第二个 catch 块会捕获并处理该异常。如果 try 块中的代码未抛出异常,则 finally 块中的代码将被执行。

示例
fun main() {
    try {
        // outer try block
        val num = "Hello".toInt()
        try {
            // inner try block
            val result = 100 / num
        } catch (e: ArithmeticException) {
            println("ArithmeticException: $e")
        }
    } catch (e: NumberFormatException) {
        println("NumberFormatException: $e")
    }
}

在上面的示例中,外层 try 块抛出了 NumberFormatException 类型的异常,内层 try 块未执行。因此,该异常被外层 catch 块捕获并处理,输出:"NumberFormatException: java.lang.NumberFormatException: For input string: "Hello""

如果将代码更改为以下内容:

fun main() {
    try {
        // outer try block
        val num = "0".toInt()
        try {
            // inner try block
            val result = 100 / num
        } catch (e: ArithmeticException) {
            println("ArithmeticException: $e")
        }
    } catch (e: NumberFormatException) {
        println("NumberFormatException: $e")
    }
}

则内层 try 块将被执行。在内层 try 块中,由于 num 的值为 0,因此会抛出 ArithmeticException 类型的异常。该异常被内层 catch 块捕获并处理,输出:"ArithmeticException: java.lang.ArithmeticException: / by zero"