Kotlin-异常处理

异常在学习与开发当中是最常见的,Kotlin的异常处理和Java以及其他开发语言的处理方式很相似。一个函数可以正常结束,也可以在出现错误的情况下抛出异常。方法的调用者能捕获这个异常并处理它:如果没有处理,异常会沿调用栈抛出。

举例一个完整的Kotlin的抛出异常的代码:

fun main() {
    val number = 300
    val percentage = if (number in 0..100)
        number
    else
        throw IllegalArgumentException("$number:不在0-100之间")
    println("查看比对结果:" + percentage)
}

在执行的代码的时候,因为300不属于0-100之间,所以控制台打印了异常。

try-catch-finally

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

import java.io.BufferedReader
import java.io.StringReader
import java.lang.NumberFormatException

/**像在Java中一样使用try*/
fun readNumber(reader: BufferedReader): Int? {
    return try {
        val line = reader.readLine()
        Integer.parseInt(line)
    } catch (e: NumberFormatException) {
        null
    } finally {
        reader.close()
    }
}

fun main() {
    val reader = BufferedReader(StringReader("259"))
    println(readNumber(reader))
}

和Java最大的区别就是throws子句没有出现在代码中:如果在Java来写这个函数,你会显式地在函数声明写上throws IOException,需要这样做的是因为IOException是一个受检异常。在Java当中,这种异常必须显式处理,必须声明你的函数也能抛出异常。

把try当作表达式

引用《Kotlin实战》中的例子

import java.io.BufferedReader
import java.io.StringReader
import java.lang.NumberFormatException

/**把try当作表达式*/
fun readNumberTry(reader: BufferedReader) {
    val number = try {
        Integer.parseInt(reader.readLine())
    } catch (e: NumberFormatException) {
        return
    }
    println(number)
}
fun main() {
    val reader = BufferedReader(StringReader("这不是一个数字"))
    readNumberTry(reader)
}

这个例子将return语句放在catch 代码块中,因 该函数的执行在 catch代码块之后不会继续运行。如果你想继续执行, catch子句也需要有 个值 它将是子句中最后一个表达式的值。

学习收获

简单实现了Kotlin中的异常处理方法,然后Kotlin没有区分受检异常未受检异常。不用指定函数抛出的异常,而且可以处理也可以不处理,可以减少一些代码疏忽造成了异常导致程序崩溃。

希望我这篇文章对学习Kotlin的小伙伴有帮助。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 欢迎前往我的csdn kotlin 异常处理机制类似 Java 异常处理机制。但有一点不同,Java 中的异常分为...
    AlfredZSGao阅读 142评论 0 1
  • 1. Java异常体系 Java异常体系设计的目的在于通过使用少量代码,实现大型、健壮、可靠程序。 1.1. 异常...
    Geekhalo阅读 219评论 0 0
  • 异常的概念 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。 比如说,你的代码少了...
    發財大力阅读 223评论 0 1
  • 1.Error和Exception的联系? 继承关系:Error和Exception都是继承于Throwable,...
    聂叼叼阅读 576评论 0 2
  • Throwable 类Error 和 Exception   Kotlin中的异常有3种,Exception、Er...
    狼性代码人阅读 4,440评论 0 3