kotlin更多语言结构——>异常
2022/1/27 6:04:19
本文主要是介绍kotlin更多语言结构——>异常,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
异常类
Kotlin 中所有异常类都是 Throwable 类的子孙类。每个异常都有消息、堆栈回溯信息以及可选的原因
使用 throw-表达式来抛出异常
throw Exception("Hi There!")
使用 try-表达式来捕获异常:
try { // 一些代码 } catch (e: SomeException) { // 处理程序 } finally { // 可选的 finally 块 }
可以有零到多个 catch 块。finally 块可以省略。但是 catch 与 finally 块至少应该存在一个
Try 是一个表达式
try 是一个表达式,即它可以有一个返回值
val a: Int? = try { parseInt(input) } catch (e: NumberFormatException) { null }
try-表达式的返回值是 try 块中的最后一个表达式或者是(所有)catch 块中的最后一个表达式。finally块中的内容不会影响表达式的结果
受检的异常
Kotlin 没有受检的异常。这其中有很多原因,但我们会提供一个简单的例子。
以下是 JDK 中 StringBuilder 类实现的一个示例接口
Appendable append(CharSequence csq) throws IOException
这个签名是什么意思?它是说,每次我追加一个字符串到一些东西(一个 StringBuilder、某种日志、一个控 制台等)上时我就必须捕获那些 IOException 。为什么?因为它可能正在执行 IO 操作( Writer 也实现了Appendable )...... 所以它导致这种代码随处可⻅的出现
try { log.append(message) } catch (IOException e) { // 必须要安全 }
Nothing 类型
在 Kotlin 中 throw 是表达式,所以你可以使用它(比如)作为 Elvis 表达式的一部分:
val s = person.name ?: throw IllegalArgumentException("Name required")
throw 表达式的类型是特殊类型 Nothing。该类型没有值,而是用于标记永远不能达到的代码位置。在你自己的代码中,你可以使用 Nothing 来标记一个永远不会返回的函数
fun fail(message: String): Nothing { throw IllegalArgumentException(message) }
当你调用该函数时,编译器会知道在该调用后就不再继续执行了
val s = person.name ?: fail("Name required") println(s) // 在此已知“s”已初始化
可能会遇到这个类型的另一种情况是类型推断。这个类型的可空变体 Nothing? 有一个可能的值是 null 。 如果用 null 来初始化一个要推断类型的值,而又没有其他信息可用于确定更具体的类型时,编译器会推断出Nothing? 类型
val x = null // “x”具有类型 `Nothing?` val l = listOf(null) // “l”具有类型 `List<Nothing?>
这篇关于kotlin更多语言结构——>异常的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-01-06Kotlin委托属性(1)
- 2023-06-15Kotlin协程-那些理不清乱不明的关系
- 2023-06-08[Kotlin Tutorials 21] 协程的取消
- 2023-05-26Kotlin难点
- 2023-02-23【备战春招】第16天 Kotlin实用技巧
- 2023-02-23【备战春招】第15天 Kotlin扩展Extensions技术探秘
- 2023-02-22【备战春招】第14天 深入理解Kotlin注解
- 2023-02-21【备战春招】第12天 深入理解Kotlin类与接口
- 2023-02-21【备战春招】第13天 深入理解Kotlin泛型
- 2023-02-18【备战春招】第10天 Kotlin方法与Lambda表达式