KotlinKotlin

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

2019-06-15  本文已影响0人  狼性代码人
  • Throwable 类
  • Error 和 Exception

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

kotlin 异常类继承关系

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

一、Throwable 类

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

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

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<String>?) {
    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

上一篇下一篇

猜你喜欢

热点阅读