📅  最后修改于: 2023-12-03 15:02:32.699000             🧑  作者: Mango
在 Kotlin 中,嵌套 try 块和多个 catch 块的语法与 Java 中相似。通过嵌套 try 块和多个 catch 块,开发者可以更加精确地捕获并处理各种异常情况。
Kotlin 中嵌套 try 块的语法如下:
try {
// try 块内的代码
try {
// 嵌套的 try 块内的代码
} catch (e: Exception) {
// 嵌套的 try 块中发生的异常
}
} catch (e: Exception) {
// 外层 try 块中发生的异常
}
在嵌套 try 块中,内层的 try 块将首先被执行。如果内层的 try 块中发生了异常,则该异常会被内层 catch 块捕获处理。如果内层的 try 块未发生异常,则外层的 try 块将继续执行。如果外层的 try 块中发生了异常,则该异常会被外层 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"