kotlin学习笔记-异常 exceptions

它这个异常,和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 类:

Throwable 是Kotlin中所有异常和错误的基类。它包含了一些常用方法,如 message(获取异常信息)和 printStackTrace(打印异常堆栈跟踪)。

Exception 类:

Exception 是 Throwable 的子类,表示程序中可能会出现的各种问题。通常,这些问题可以在开发时预料到并在运行时捕获和处理。

Error 类:

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 是一个表达式

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/

https://kotlinlang.org/docs/exceptions.html