首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Kotlin系列之异常

这一节我们说说Kotlin中的异常。

Java中的异常

我们知道,在Java中,异常是一个绕不过的话题,说到异常,最先想到的就是,在Kotlin中也是同样的,使用方式几乎是不变的,但是也有一些小小的变动。这里我们还是以往的惯例,先放Java代码,再上Kotlin代码。

Java代码

上面的代码方法会抛出,这是一个受检查异常,必须要显式处理,要么在方法声明上抛出,要么在内部捕获处理。其实代码里面的方法也会抛出一个运行时异常,Java是不强制要求我们捕获处理运行时异常的,但这里我们为了和后面的内容配合讲解,处理一下这个异常。

修改后的代码是这样。

Java代码

这里使用来改善了一下代码。在Java中,一个函数可以正常结束,也会在出现错误的时候抛出异常,方法的调用者可以捕获这个异常并处理它,如果没有被处理,异常会沿着调用栈再次抛出。

Kotlin中throw作为表达式

在Kotlin中异常处理机制是相似的,但与Java中不同的是是一个表达式,可以作为另一个表达式的一部分使用。我们看看下面的代码。

Kotlin代码

这里说一下,前面的内容也说过也是表达式,上面的代码,如果n的值在0-100直接则res的值初始化为n的值,如果不是,抛出一个异常,res的值不初始化。与我们以前的代码一样,与Java语言不同,抛出的异常不需要使用。

Kotlin中的异常

我们在开始给出了一个Java中的的例子,这里我们再使用Kotlin代码实现一下,对比一下两者的差异。

Kotlin代码

上面的代码有几点需要注意。

正如前面一直在说的,函数返回值类型是写在最后,用分割。

你会发现Kotlin中不需要显式在方法声明上声明抛出的。

变量的声明也是的格式。

在Kotlin中不再区分受检查异常和不受检查异常。原因在于有时候比如我们的文件关闭出现错误的异常,除了看到这个异常,其实我们也做不了什么,Kotlin则直接将这种代码去掉了。

可能有的人还有疑问,在前面的java代码的块中有这样的的判空代码

为什么在Kotlin中消失了?这是因为在Kotlin中声明函数参数类型时,如果这样写,表示这是一个不可空值,如果要声明为可空值可以这样写,这样就需要在close前判空了。

Kotlin中try作为表达式

前面我们说了作为表达式,其实try也是一个表达式,我们可以将的值赋值给一个变量。我们继续该一下上面的代码。

Kotlin代码

你会发现代码又变少了,这里我们先补充一条规则才能理解上面的代码。

当作为表达式时,如果try块执行正常,则try块中最后一个表达式就是结果,如果抛出异常进入块,则catch块中最后一个表达式的值就是结果。

知道了这条规则是不是上面的代码就好理解了

写在最后

异常机制的出现是为了让我写出更加健壮的代码,在Kotlin中对Java的异常处理机制进行了一些改进和完善,让我们用更简洁的方式处理异常。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180119G0352S00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券