2.8 Kotlin异常处理

欢迎前往我的csdn

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

Kotlin异常介绍:

Kotlin中的异常有3种,Exception、Error和Throwable,所有异常都直接或间接的继承于Throwable类,它们的继承关系如下:


2.8.1:kotlin异常

在Throwable类中有几个非常重要的属性和函数:

message 属性:保存发生错误或异常时的详细信息。

printStackTrace 函数:打印错误或异常堆栈跟踪信息。

toString 函数:获取错误或异常对象的描述。

Throwable有两个子类:Error和Exception。

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

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

Kotlin异常处理:

在Kotlin中,因为所有异常都是非必检的,所以异常不必成为函数的组成部分。处理一个异常与Java类似,用try、catch、finally块。其中将可能发生异常的语句放在try{}中,catch程序块来处理不同种类的异常,finally可选且最后执行。语法如下:

            try {
                //程序代码块
            }catch (e:ExceptionType1){
               //对ExceptionType1的处理
            }catch (e:ExceptionType2){
                //对ExceptionType2的处理
            } finally {
                //最后执行程序
            }

下面看个例子:

    companion object {
        @JvmStatic
        fun main(args: Array) {
            try {
                val name: String? = null
                println(name!!.length)
            } catch (e: Exception) {
                e.printStackTrace()
            }finally {
                println("结束")
            }
        }
    }

//结果:

kotlin.KotlinNullPointerException
    at com.alfred.Test$Companion.main(Test.kt:14)
    at com.alfred.Test.main(Test.kt)
结束

Kotlin throw关键字:

用于抛出显式异常。它用于抛出自定义异常。要抛出异常对象,将使用throw-expression。

throw关键字的语法
throw SomeException()

让我们来看一下throw关键字的示例:

fun main(args: Array) {
    var age: Int = (0..50).random()
    validate(age)
}
 
fun validate(age: Int) {
    println("age = $age")
    if (age < 18)
        throw ArithmeticException("小学生不能玩吃鸡")
    else
        println("不错,你满18岁了,可以玩吃鸡")
}

//执行第一次结果:

age = 12
Exception in thread "main" java.lang.ArithmeticException: 小学生不能玩吃鸡
    at com.alfred.TestKt.validate(Test.kt:16)
    at com.alfred.TestKt.main(Test.kt:10)

//执行第二次结果:

age = 39
不错,你满18岁了,可以玩吃鸡

你可能感兴趣的:(2.8 Kotlin异常处理)