Kotlin 自定义异常,在Kotlin标准库中封装了大量的异常类,虽然这些异常类可以描述编程时出现的大部分异常情况,但是在程序开发中有时可能需要描述程序中特有的异常情况,例如在设计一个变量name的值时,不允许该变量的值为null,为了解决这个问题,Kotlin与Java一样,也允许用户自定义异常,但自定义的异常类必须继承自Throwable类或其子类,自定义异常类的主构函数可以传递一个String类型的message参数,也可以不传递参数,自定义异常类的语法格式如下:
//主构函数带参数的异常类
class异常类名称(override val message: String?) : Throwable() {}
//主构函数不带参数的异常类
class异常类名称() : Throwable() {}
在上述语法格式中,主构造函数带message参数的异常类,在抛出异常信息时会打印message信息,主构造函数不带message参数的异常类,在抛出异常信息时不会打印异常的具体信息。
接下来我们通过一个案例来学习自定义异常,具体代码如下所示。
package com.itheima.chapter04
class MyException(override val message: String?) : Throwable() {
}
fun main(args: Array<String>) {
var name: String? = null
name?.length ?: throw MyException("变量name 的值为null")
println("name.length=${name.length}")
}
运行结果:
Exception in thread"main"com.itheima.chapter04.MyException:变量name的值为null
从运行结果可以看出,程序在运行时发生了异常,这是因为在程序中使用throw关键字抛出异常对象时,需要使用try…catch
语句对抛出的异常进行处理。为了解决该程序运行时发生异常的问题,可以修改该程序,在抛出异常的地方使用try…catch
语句对异常进行处理,修改后的代码如下所示。
package com.itheima.chapter04
class MyException(override val message: String?) : Throwable() {
}
fun main(args: Array<String>) {
var name: String? = null
try {
name?.length ?: throw MyException("变量name 的值为null")
println("name.length=${name.length}")
} catch (e: MyException) {
println(e.message)
}
}
运行结果:
变量name的值为null
在上述代码中,使用了一个try…catch
语句用于捕获变量name的值为null时抛出的异常,在调用“name?.length”
代码时,由于变量name的值不能为null,程序会抛出一个自定义异常MyException,该异常被捕获后最终被catch代码块处理,并打印异常信息。
酷客教程相关文章:
评论前必须登录!
注册