它这个异常,和js、python 用法很像,学起来没啥压力
使用 try-catch-finally语句 来处理异常, 类似 JavaScript
try {
// 一些代码,可能会抛出异常
} catch (e: SomeException) {
// 处理异常
} finally {
// 可选的 finally 块,不管有没有异常,这里都会执行
}
可以有 0个、或者多个 catch 块 ; finally 块可以省略。 但是 catch 与 finally 块至少需有一个。
fun main() {
// 抛出异常
throw Exception("Hi There!")
}
Kotlin 中所有异常类继承自 Throwable 类。
Kotlin 中有一些内置的异常类,如下:
Throwable 是Kotlin中所有异常和错误的基类。它包含了一些常用方法,如 message(获取异常信息)和 printStackTrace(打印异常堆栈跟踪)。
Exception 是 Throwable 的子类,表示程序中可能会出现的各种问题。通常,这些问题可以在开发时预料到并在运行时捕获和处理。
Error 也是 Throwable 的子类,它代表程序中的严重错误,例如虚拟机错误。通常,开发者不需要处理这些错误,因为它们表示程序无法继续执行。
Throwable 是 Exception 和 Error 的父类,Exception 和 Error 都是 Throwable 的子类。
Throwable
/ \
/ \
Exception Error
要自定义异常,直接继承内置的异常类即可
// 自定义了一个 名为 CustomException 的异常类
class CustomException(message: String) : Exception(message)
// 一个检查年龄的函数
fun checkAge(age: Int) {
if (age < 18) {
// 抛出自定义的异常
throw CustomException("年龄不到18,禁止访问.")
}
}
fun main() {
try {
checkAge(15)
} catch (e: CustomException) {
// 捕捉到了自定义的 CustomException 异常
println(e.message)
}
}
try catch 和 if else一样,都是表达式,都可以返回一个值
当try里面的代码没报错,那try里的最后一个表达式会返回
如果try里面的代码报错了,那么catch里面的最后一个表达式会返回
val a: Int? = try {
input.toInt()
} catch (e: NumberFormatException) {
null
}
// 自定义了一个 名为 CustomException 的异常类
class CustomException(message: String) : Error(message)
// 一个检查年龄的函数
fun checkAge(age: Int) {
if (age < 18) {
// 抛出自定义的异常
throw CustomException("年龄不到18,禁止访问.")
}
}
fun main() {
var a15= try {
checkAge(15)
} catch (e: CustomException) {
println(e.message)
"这里是catch哦"
}
println(a15)
var a19= try {
checkAge(19)
"这里是try"
} catch (e: CustomException) {
println(e.message)
"这里是catch哦"
}
println(a19)
}
//输出
//年龄不到18,禁止访问.
//这里是catch哦 分析:因为checkAge(15) 报错了,所以catch里面的最后一个表达式会返回
//这里是try 分析:因为checkAge(19) 没报错,所以try里面的最后一个表达式会返回
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-throwable/