Kotlin2.5异常

作者: 无心下棋 | 来源:发表于2018-05-14 22:43 被阅读35次

Kotlin的异常处理和Java以及其他许多语言的处理方式相似,异常处理语句的基本形式和Java类似,抛出异常的方式也不例外:

if (percentage !in 0..100) {
    throw IllegalArgumentException ("百分数$percentage必须在0到100之间")
}

和所有其他的类一样,不必使用new关键字来创建异常实例。
和Java不同的是,Kotlin中throw结构是一个表达式,能作为另一个表达式的一部分使用:

val percentage = if (number in 0..100)
                      number
                  else
                      throw IllegalArgumentException ("百分数$percentage必须在0到100之间")     

在这个例子中,如果条件满足,程序的行为是正确的,而percentage变量会用number初始化,否则会抛出异常,而变量也不会初始化。

2.5.1try、catch和finally

和Java一样,使用带有catch和finally子句的try结构来处理异常。下面代码会看到这个结构,这个例子从给定的文件中读取一行,尝试把它解析成数字,返回这个数字;或者当这一行不是一个有效数字时返回null。

fun readNumber(reader: BufferedReader): Int? {
        try {
            val line = reader.readLine()
            return Integer.parseInt(line)
        } catch (e: NumberFormatException) {
            return null
        } finally {
            reader.close()
        }
    }

和Java最大的区别就是throws子句没有出现在代码中:如果用Java来写这个函数,会显式地在函数声明后写上throws IOException。需要这样做的原因是IOException是一个受检异常。
和其他许多现代JVM语言一样,Kotlin并不区分受检异常和未受检异常。不用指定函数抛出的异常,而且可以处理也可以不处理异常。经验显示Java规则常常导致许多毫无意义的重新抛出或者忽略异常的代码,而且这些规则并不能总是避免可能发生的错误。

2.5.2try作为表达式

为了了解Kotlin和Java之间另外一个显著的差距,修改一下这个例子。去掉finally部分,(因为已经看过它是怎样工作的),并添加一些代码,用来打印从文件中读取的数字:

fun readNumber(reader: BufferedReader) {
        val number = try {
            Integer.parseInt(reader.readLine())
        } catch (e: NumberFormatException) {
            return
        }
    }

调用会发现没有任何输出。
Kotlin中的try关键字就像if和when一样,引入了表达式,可以把它的值赋给一个变量。不同于if,总是需要用花括号把语句主体括起来。和其他语句一样,如果其主体包含多个表达式,那么整个try表达式的值就是最后一个表达式的值。

相关文章

  • Kotlin2.5异常

    Kotlin的异常处理和Java以及其他许多语言的处理方式相似,异常处理语句的基本形式和Java类似,抛出异常的方...

  • 异常和模块

    异常 目标 了解异常 捕获异常 异常的else 异常finally 异常的传递 自定义异常 一. 了解异常 当检测...

  • python多线程

    异常基础知识 -异常简介: 运行时错误 -异常类: 异常数据 异常名称,异常数据,异常类型 -自定义异常 clas...

  • dart 异常

    dart中的异常 异常处理 抛出异常 异常捕获

  • Java基础之异常

    Java基础之异常 目录 异常简单介绍 ThrowableErrorException 异常分类 如何处理异常异常...

  • python核心编程-错误与异常

    本章主题:什么是异常Python中的异常探测和处理异常上下文管理引发异常断言标准异常创建异常相关模块 什么是异常 ...

  • motan(RPC)系统梳理知识点

    异常分类: 业务异常(bizException) 服务异常(serviceException) 框架异常(fram...

  • 异常

    Java异常体系 异常的分类 Java的异常分为两大类:Checked异常和Runtime异常(运行时异常)。所有...

  • 从零构架个人博客网站(二)-全局异常处理

    中间件的异常 全局异常中间件全局异常监听定义异常的返回结果定义常见的异常状态开发环境 异常查看 对于异常,我们可以...

  • Node.js异常处理

    Node.js异常分类: 变量异常 函数异常 调用异常 变量异常 未定义变量 未包含对象 变量类型错误 函数异常 ...

网友评论

    本文标题:Kotlin2.5异常

    本文链接:https://www.haomeiwen.com/subject/qessdftx.html