异常类

  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更多语言结构——>异常的更多相关文章

  1. 06. Go 语言结构体

    Go语言结构体(struct) Go 语言通过用自定义的方式形成新的类型,结构体是类型中带有成员的复合类型.Go 语言使用结构体和结构体成员来描述真实世界的实体和实体对应的各种属性. Go 语言中的类 ...

  2. KOTLIN开发语言文档(官方文档) -- 2.基本概念

    网页链接:https://kotlinlang.org/docs/reference/basic-types.html 2.   基本概念 2.1.  基本类型 从可以在任何变量处理调用成员函数和属性 ...

  3. Java 语言结构【转】

    Java 语言结构 基础:包(Package).类(Class)和对象(Object) 了解 Java 的包(Package).类(Class)和对象(Object)这些基础术语是非常重要的,这部分内 ...

  4. KOTLIN开发语言文档(官方文档) -- 入门

    网页链接:https://kotlinlang.org/docs/reference/basic-syntax.html 1.   入门 1.1.  基本语法 1.1.1.   定义包 包说明应该在源 ...

  5. 漫谈C语言结构体struct、公用体union空间占用

    先用代码说话: #include<stdio.h> union union_data0{ int a ;//本身占用4个字节 char b ;//本身占用1个字节 int c ; }; u ...

  6. 解析C语言结构体对齐(内存对齐问题)

    C语言结构体对齐也是老生常谈的话题了.基本上是面试题的必考题.内容虽然很基础,但一不小心就会弄错.写出一个struct,然后sizeof,你会不会经常对结果感到奇怪?sizeof的结果往往都比你声明的 ...

  7. 不可或缺 Windows Native (8) - C 语言: 结构体,共用体,枚举,类型定义符

    [源码下载] 不可或缺 Windows Native (8) - C 语言: 结构体,共用体,枚举,类型定义符 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 结构体 ...

  8. (转)PHP的语言结构和函数的区别

    相信大家经常看到对比一些PHP应用中,说用isset() 替换 strlen(),isset比strlen执行速度快等. 例子: if ( isset($user) ) { //do some thi ...

  9. php入门 数据类型 运算符 语言结构语句 函数 类与面向对象

    php PHP-enabled web pages are treated just like regular HTML pages and you can create and edit them ...

  10. Go语言结构体(struct)

    Go 语言结构体 Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型. 结构体是由一系列具有相同类型或不同类型的数据构成的数据集合. 结构体表示一项记录,比如保存图 ...

随机推荐

  1. 【MySQL】查询是否连续5次失败

    场所房间表 场所编号和房间号联合唯一, 一对多关系 场所编号关联商家ID,一对一关系 CREATE TABLE `aisw_room` ( `ID` int(11) NOT NULL AUTO_INC ...

  2. 【MySQL】全库调整表大小写语句

    统一修改字段成小写+下划线的命名规则: V1上线后,重新看SQL调整的较可行的写法: # = = = = = = = = = = = = = = = 统一更改全库所有字段大小写脚本SQL(会删除字段原 ...

  3. 【MySQL】替换件需求

    先上个表结构吧: CREATE TABLE `tm_part_replace` ( `ITEM_ID` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', ...

  4. 【Spring】使用SpringTest报错 java.lang.NoSuchMethodError

    完整报错信息: "C:\Program Files\Java\jdk1.8.0_301\bin\java.exe" -ea -Didea.test.cyclic.buffer.si ...

  5. 【BIOS】关于启用快速启动之后进不了BIOS的问题

    这是我2013年的东芝SateLite M800的BIOS 作死开了快速启动 然后开启就跳过BIOS了 找贴吧看到的方法,先关机,然后按住访问BIOS的按键不要放 再启动,就会进BIOS了[老哥真牛]

  6. 【Java】API SecureRandom 安全随机

    之前学习的Random工具类只是一个伪随机数类... @Test public void secureRandom() throws Exception { // 个不可预测的安全的随机数 // 无法 ...

  7. 并行化强化学习 —— 最终版本 —— 并行reinforce算法的尝试

    本文代码地址: https://gitee.com/devilmaycry812839668/final_-version_-parallelism_-reinforce_-cart-pole 结合了 ...

  8. xshell终端——多个窗格同步输入——xshell同时控制多个窗口的快捷方式

    参考: https://blog.csdn.net/m0_58347801/article/details/129551382 ======================== 突发发现了终端的另类用 ...

  9. mojo编程语言:编译后的mojo二进制执行文件调用python库报错——设置MOJO_PYTHON_LIBRARY变量

    代码: from python import Python fn f() raises: # This is equivalent to Python's `import numpy as np` l ...

  10. 中国超级计算机为什么不能为AI提供算力?

    网上看到这样的帖子: https://www.zhihu.com/question/609008408/answer/3130831897 ============================== ...