kotlin学习笔记-异常 exceptions

发布时间:

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 


2025 © 糊涂.