- Throwable 类
- Error 和 Exception
Kotlin中的异常有3种,Exception
、Error
和 Throwable
。它们的继承关系如下:
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<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
有两个子类: Error
和 Exception
。
-
Error
Error
是程序无法恢复的严重错误,程序员根本无能为力,只能让程序中止。例如:Java虚拟机内部错误、内存溢出和资源耗尽等严重情况。 -
Exception
Exception
是程序可以恢复的异常,它是程序员所能掌控的。例如:除零异常、空指针访问、网络连接中断 和 读取不存在文件等。
网友评论