原文: https://beginnersbook.com/2019/03/kotlin-exception-handling/

异常是在程序运行时可能发生的不必要的问题,并突然终止您的程序。异常处理是一个过程,使用它可以防止程序出现可能破坏我们代码的异常。

有两种类型的异常:

  1. 受检的异常声明为方法签名的一部分,并在编译时检查,例如IOException
  2. 非受检的异常不需要作为方法的一部分添加签名,并在运行时检查它们,例如NullPointerException

注意:在 Kotlin 中,所有异常情况都非受检。

处理 Kotlin 中的异常与 Java 相同。我们使用trycatchfinally块来处理 kotlin 代码中的异常。

Kotlin 异常处理示例

在下面的例子中,我们将一个数字除以 0(零),这应该抛出ArithmeticException。由于此代码在try块中,因此将执行相应的catch块。

在这种情况下,发生了ArithmeticException,因此执行了ArithmeticExceptioncatch块,并在输出中打印了"Arithmetic Exception"

当发生异常时,它会忽略该点之后的所有内容,并且控制流会立即跳转到catch块(如果有的话)。无论是否发生异常,始终执行finally块。

  1. fun main(args: Array<String>) {
  2. try {
  3. var num = 10/0
  4. println("BeginnersBook.com")
  5. println(num)
  6. } catch (e: ArithmeticException) {
  7. println("Arithmetic Exception")
  8. } catch (e: Exception) {
  9. println(e)
  10. } finally {
  11. println("It will print in any case.")
  12. }
  13. }

输出:

Kotlin 异常处理 - 图1

如果我们不处理异常会怎么样?

假设我们在上面的例子中没有处理异常,那么程序会突然终止。
这里我们没有处理异常,所以程序因错误而终止。

  1. fun main(args: Array<String>) {
  2. var num = 10/0
  3. println("BeginnersBook.com")
  4. println(num)
  5. }

输出:

Kotlin 异常处理 - 图2

如何在 Kotlin 中抛出异常

我们也可以使用throw关键字抛出异常。在下面的示例中,我们使用throw关键字抛出异常。异常执行前的语句已执行,但异常后的语句未执行,因为控制流已转移到catch块。

  1. fun main(args: Array<String>) {
  2. try{
  3. println("Before exception")
  4. throw Exception("Something went wrong here")
  5. println("After exception")
  6. }
  7. catch(e: Exception){
  8. println(e)
  9. }
  10. finally{
  11. println("You can't ignore me")
  12. }
  13. }

输出:

Kotlin 异常处理 - 图3