异常类

  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. 【Java】Generic 泛型

    Generic 泛型 为什么需要泛型? 集合容器再设计阶段/声明阶段不能确定这个容器实际存储的是什么类型的对象 JDK5 以前只能把元素设计为Object基类 在JDK5之后用泛型来约束对象类型 除了 ...

  2. 一个疑问:foundation models , 现在已经有了视觉的大模型也有了语言大模型,那么什么时候会有强化学习大模型,更准确的说什么时候会有强化学习的基础模型(foundation models)

    一个疑问:foundation models , 现在已经有了视觉的大模型也有了语言大模型,那么什么时候会有强化学习大模型,更准确的说什么时候会有强化学习的基础模型(foundation models ...

  3. 【转载】How to Use t-SNE Effectively —— (机器学习数据可视化) t-SNE使用指南

    原文地址:https://distill.pub/2016/misread-tsne/ 说明: 原文是比较有名的一个指南性博文,讲的就是t-SNE技术的一些使用注意事项和说明,属于说明性文章,内容很不 ...

  4. Go 链路追踪入门 Opentelemetry

    前言 Opentelemetry 分布式链路跟踪( Distributed Tracing )的概念最早是由 Google 提出来的,发展至今技术已经比较成熟,也是有一些协议标准可以参考.目前在 Tr ...

  5. games101 作业4及作业5 详解光线追踪框架

    games101 作业4及作业5 详解光线追踪框架 作业4 代码分析 作业四的代码整体比较简单 主要流程就是 通过鼠标事件 获取四个控制点的坐标 然后绘制贝塞尔曲线的内容就由我们来完成 理论分析 贝塞 ...

  6. shell编程入门-适合小白

    一.变量的使用 1. 变量命名 定义变量时,变量名不加美元符号($,PHP语言中变量需要),如: your_name="yikoulinux" 注意,变量名和等号之间不能有空格,这 ...

  7. 7. 从0学ARM-GNU伪指令、代码编译,lds使用

    <嵌入式工程师到底要不要学习ARM汇编指令?arm学习文章汇总> <到底什么是Cortex.ARMv8.arm架构.ARM指令集.soc?一文帮你梳理基础概念[科普]> 关于A ...

  8. manim边学边做--直线类

    直线是最常用的二维结构,也是构造其他二维图形的基础.manim中针对线性结构提供了很多模块,本篇主要介绍常用的几个直线类的模块. Line:通用直线 DashedLine:各种类型的虚线 Tangen ...

  9. 安装部署harbor

    配置文件中修改内容hostname 和 证书 私钥 需要指定到文件 hostname: hub.rainsc.com # http related config http: # port for ht ...

  10. GPG 用法

    GPG (GnuPG) 是一种加密工具,用于数据加密和数字签名. 密钥配置 # 生成密钥 gpg --full-generate-key # 列出密钥 gpg --list-keys # 列出公钥 g ...