Kotlin学习(14)→Kotlin异常与异常处理


大家过年好。我现在学习了Kotlin的异常处理,现在又开始更新了。希望大家新的一年万事顺利,肺炎疫情能早日得到控制。
使用的软件是 IDEA 2019
已经熟悉Java中的异常的可以简单略过,Kotlin中所用的异常依然是Java文件定义的。

1、所有异常的超类→Throwable

Kotlin中,关于Throwable的知识和Java中是类似的。
Kotlin中的异常都间接继承了一个超类ThrowableThrowable被两种类直接继承:Error(错误)和Exception(异常)。
错误和异常相比,往往更加严重。**如果能捕获异常,确定处理逻辑,在发生异常时,程序就不至于崩溃停止,**依然是可以运行的。但是发生了错误则程序是肯定不能正常运行的。这里主要讲解异常。
异常处理算是软件最基本的功能之一,比较复杂的软件可能会发生各种异常,因为异常而经常崩溃是绝对不能允许的。

2、异常→Exception

我们从常见的异常说起。
数组索引越界 (ArrayIndexOutOfBoundsException) 是一种常见的异常,在IDEA下按住ctrl键点击可以查看 ArrayIndexOutOfBoundsException 的详细信息。可以看到ArrayIndexOutOfBoundsException 的继承关系为(从最底到最顶):

ArrayIndexOutOfBoundsException数组越界异常IndexOutOfBoundsException越界异常RuntimeException运行异常Exception异常Throwable可抛
同时也注意到,Kotlin所用的依然是Java中的异常类型,相关异常的定义都在Java文件中。
下面来学一下异常处理的语句结构。

3、try…catch…finally

try…catch…finally语句的结构是:

try {
    //可能会出现异常的代码
} catch (e:Exception) {
    //如果在try模块中发生了异常e,则跳至catch中执行其中的语句
} finally {
    //不论try...catch...执行结果如何,最后都会执行finally模块中的语句
}

下面可以来编写一段比较简单的程序,用来检测数组越界问题。
代码如下:

class ExceptionTest(var IntArray:Array<Int>) {
    var i:Int=6
    init {

    }
    fun printMessage() {
        while(i>=0) {
            try {
                println("${IntArray[i]}\t下标\t$i")

            } catch (e:ArrayIndexOutOfBoundsException) {
                println("出现异常,\t数组中不存在下标为$i 的元素")
            } finally {
                i--
            }
        }
    }
}

fun main() {
    var ee:ExceptionTest = ExceptionTest(arrayOf(1,2,3,4,5,6))
    ee.printMessage()

}

输出结果如下:

出现异常,	数组中不存在下标为6 的元素
6	下标	5
5	下标	4
4	下标	3
3	下标	2
2	下标	1
1	下标	0

在printMessage函数中,我们在try…catch…finally语句中,尝试打印数组中下标为i的元素。为了排除可能存在的数组越界问题,我们把数组元素打印的行为放在try语句块中,在catch语句块中,先通过指定异常e的类型捕获了数组越界异常,对于这种情况,我们输出了一段提示信息。
在finally语句块中,我们令i减小1,这是不论之前两步结果如何,这一步都会执行的。当然,如果程序的异常导致程序无法运行则另当别论。
这样,本来数组会因为越界而导致程序报错,我们添加了异常处理逻辑之后,成功捕获了越界异常,指定了处理逻辑,程序依然可以正常的运行,输出数组中的元素,并在越界时,给出提示信息。

需要注意的是,catch中指定了异常的类型,这一段catch语句就只能捕获这一种异常,可以有多个catch模块,因为一段程序中可能会出现不止一种异常,但是这就要求我们要考虑到所有可能的情况,这是需要锻炼的。

Kotlin(Java)本身就提供了许多异常,但是有些时候,我们仍然需要自定义异常类型来处理我们自己的异常,之后会更新自定义异常的知识。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值