Kotlin 受检异常

Kotlin 受检异常,Java中有两种异常类型,一种是受检异常(checked exception),一种是非受检异常(unchecked exception),在编写Java代码时,由于编译器在编译时会检查受检异常,因此IDEA会提示进行try…catch操作。受检异常显得比较麻烦,一直以来争议比较大,可能会导致Java API变得复杂,在编写代码时,需要进行大量的try…catch操作,而Kotlin中相比于Java没有了受检异常,IDEA也不会提示进行try…catch操作。

在Kotlin程序中,当IDEA调用某一个方法时,如果该方法中存在可能出现异常的代码时,编辑器不会提示程序需要进行try…catch操作,直接运行该程序时会抛出异常信息。接下来我们通过一个案例来看一下Kotlin中可能出现异常的代码块是否会提示进行try…catch操作。具体代码如下所示。

package com.itheima.chapter04
fun getAge(): Int? {
    var age = "Age=18 岁"
    return Integer.parseInt(age)
}
fun main(args: Array<String>) {
    var age = getAge()
    println(" 酷客教程年龄:${age} 岁")
}

运行结果:

Exception in thread"main"java.lang.NumberFormatException:For input string:"Age=18岁"
at com.itheima.chapter04.Exception1Kt.getAge(Exception1.kt:4)
at com.itheima.chapter04.Exception1Kt.main(Exception1.kt:7)

将上述代码放入IDEA中可以看到,第4行代码没有提示进行try…catch操作。根据上述代码的运行结果可知,如果直接运行该程序,会抛出数字格式转换异常。

如果将上述代码添加上try…catch操作来捕获这个数字格式转换异常,则程序就不会报错,具体代码如下所示。

package com.itheima.chapter04
fun getAge(): Int? {
    try {
        var age = "Age=18 岁"
        return Integer.parseInt(age)
    } catch (e: NumberFormatException) {
        return 0
    }
}
fun main(args: Array<String>) {
   var age = getAge()
   println(" 年龄:${age} 岁")
}

运行结果:

年龄:0岁

根据上述代码可知,用try…catch来处理有异常的代码块就不会在程序运行时抛出异常了。

酷客教程相关文章:

赞(0)

评论 抢沙发

评论前必须登录!