Kotlin异常处理(1)异常类型

  • Throwable 类
  • Error 和 Exception

  Kotlin中的异常有3种,ExceptionErrorThrowable。它们的继承关系如下:

Kotlin异常处理(1)异常类型_第1张图片
kotlin 异常类继承关系

  kotlin 异常处理机制类似 Java 异常处理机制。但有一点不同,Java 中的异常分为两类,受检查异常运行时异常,受检查异常要用 try-catch 捕获,要么抛出,否则会发生编译错误。而 kotlin 中没有受检查异常,所有异常都是运行时异常,即便是原本在 Java 中的受检查异常,在 kotlin 中也是运行时异常,例如:IOException 在 Java 中是受检查异常,在 kotlin 中是运行时异常。

一、Throwable 类

  kotlin 中所有异常都直接或间接的继承于 Throwable 类,在Throwable类中有几个非常重要的属性和函数:

  • message 属性。保存发生错误或异常时的详细信息。
  • printStackTrace 函数。打印错误或异常堆栈跟踪信息。
  • toString 函数。获取错误或异常对象的描述。

  提示:堆栈跟踪是函数调用过程的轨迹,它包含了程序执行过程中函数调用的顺序和所在源代码行号。

fun divide(number: Int, divisor: Int) : Int {
    try {
        return number / divisor
    } catch (throwable: Throwable) {
        println("message : ${throwable.message}")
        println("toString() : ${throwable.toString()}")
        println("printStackTrace() 输出堆栈信息:")
        println(throwable.printStackTrace())
    }
    return 0
}

fun main(args: Array?) {
    val divisor = 0
    val result = divide(5, divisor)
    println("divide(5, $divisor) = $result")
}

运行结果如下:

I: message : divide by zero
I: toString() : java.lang.ArithmeticException: divide by zero
I: printStackTrace() 输出堆栈信息:
W: java.lang.ArithmeticException: divide by zero
W:     at cn.ak.kotmodule.WwwwKt.divide(wwww.kt:16)
W:     at cn.ak.kotmodule.WwwwKt.main(wwww.kt:28)
W:     at cn.ak.kot.MainActivity$onCreate$1.onClick(MainActivity.kt:19)
W:     at android.view.View.performClick(View.java:6597)
W:     at android.view.View.performClickInternal(View.java:6574)
W:     at android.view.View.access$3100(View.java:778)
W:     at android.view.View$PerformClick.run(View.java:25885)
W:     at android.os.Handler.handleCallback(Handler.java:873)
W:     at android.os.Handler.dispatchMessage(Handler.java:99)
W:     at android.os.Looper.loop(Looper.java:193)
W:     at android.app.ActivityThread.main(ActivityThread.java:6669)
W:     at java.lang.reflect.Method.invoke(Native Method)
W:     at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
W:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
I: kotlin.Unit
I: divide(5, 0) = 0

  将可以发生异常的语句放到try-catch代码块中,称为捕获异常。

二、Error 和 Exception

  Throwable 有两个子类: ErrorException

  • Error
      Error 是程序无法恢复的严重错误,程序员根本无能为力,只能让程序中止。例如:Java虚拟机内部错误、内存溢出和资源耗尽等严重情况。

  • Exception
      Exception 是程序可以恢复的异常,它是程序员所能掌控的。例如:除零异常、空指针访问、网络连接中断 和 读取不存在文件等。

你可能感兴趣的:(Kotlin异常处理(1)异常类型)