美文网首页KotlinKotlin
Kotlin异常处理(1)异常类型

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

作者: 狼性代码人 | 来源:发表于2019-06-15 02:49 被阅读0次
    • Throwable 类
    • Error 和 Exception

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

    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<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

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

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

    相关文章

      网友评论

        本文标题:Kotlin异常处理(1)异常类型

        本文链接:https://www.haomeiwen.com/subject/ewoufctx.html