全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Kotlin 基础教程之异常

Kotlin 基础教程之异常

概述

在Kotlin-null的处理里提到的NPE,它就是一个异常。而,异常是程序运行过程中出现的错误。在Kotlin中,所有的异常都继承于Throwable。对于每一个异常而言,它不仅仅包括异常的信息,还可以选择性包括异常的原因,而其原因也是一个异常的实例。

抛出异常

使用 throw表达式抛出异常:

throw MyException("Hi There!")

捕获异常

如果在函数内部抛出了异常(或者在函数内部调用的其他函数抛出了异常),这个函数将在抛出异常的地方结束。如果不希望函数结束,此时就必须捕获这个被抛出的异常并处理这个异常。

在Kotlin中,要捕获异常, 可以使用 try 表达式:

try {
  // 某些代码
}
catch (e: SomeException) {
  // 异常处理
}
finally {
  // 可选的 finally 代码段
}
  1. try语句块:表示要尝试运行代码,try语句块中代码受异常监控,其中代码发生异常时,会抛出异常对象。
  2. catch语句块:会捕获try代码块中发生的异常并在其代码块中做异常处理,catch语句带一个Throwable类型的参数,表示可捕获异常类型。当try中出现异常时,catch会捕获到发生的异常,并和自己的异常类型匹配, 若匹配,则执行catch块中代码,并将catch块参数指向所抛的异常对象。catch语句可以有多个, 用来匹配多个中的一个异常,一旦匹上配后,就不再尝试匹配别的catch块了。 通过异常对象可以获取异常发生时完整的JVM堆栈信息,以及异常信息和异常发生的原因等。
  3. finally语句块:紧跟catch语句后的语句块,这个语句块总是会在方法返回前执行,而不管是否try语句块是否发生异常。并且这个语句块总是在方法返回前执行。 目的是给程序一个补救的机会。这样做也体现了Java语言的健壮性。

注:

  1. try、catch、finally三个语句块均不能单独使用,三者可以组成 try…catch…finally、try…catch、try…finally三种结构,catch语句可以有一个或多个,finally语句最多一个。
  2. try、catch、finally三个代码块中变量的作用域为代码块内部,分别独立而不能相互访问。如果要在三个块中都可以访问,则需要将变量定义到这些块的外面。
  3. 多个catch块时候,只会匹配其中一个异常类并执行catch块代码,而不会再执行别的catch块,并且匹配catch语句的顺序是由上到下。
  4. try表达式中可以有0个或多个catch代码段. finally 代码段可以省略. 但是,catch或 finally代码段至少要出现一个与try配对出现。

自定义异常

在Kotlin标准库中封装的异常类型,不可能会预见所有的可能碰见的异常情况,此时自己定义异常,来表示程序中可能出现的特定问题。

如果想自定义异常,就必须继承现有的异常类,一般都继承其异常情况相似的类,建立异常类型最简单的方法就是使用编辑器产生默认的构造方法,这样简单而有效。

fun main(args: Array<String>) {

  var b: String? = null

  try {
    b?.length ?: throw MyExcepttion("b不能为空")
  } catch (ex: MyExcepttion) {
    println("ex: ${ex.message}")
  } catch (npe: NullPointerException) {
    println("npe: ${npe.message}")
  } finally {
    println("finally")
  }

}

public class MyExcepttion(override val message: String) : Throwable(){

}

// Log
ex: b不能为空
finally

try表达式

在Kotlin中try是一个表达式, 也就是说, 它可以有返回值.

val a: Int? = try { parseInt(input) } catch (e: NumberFormatException) { null }

try表达式的返回值, 要么是try代码段内最后一个表达式的值,要么是 catch代码段内最后一个表达式的值. finally代码段的内容不会影响 try 表达式的结果值.

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# Kotlin  # 异常  # 异常详解  # Kotlin协程之Flow异常示例处理  # kotlin 协程上下文异常处理详解  # Kotlin全局捕捉协程异常方法详解  # Kotlin遍历集合导致并发修改异常的原因和解决方法  # Kotlin的枚举与异常示例详解  # Kotlin基础学习之循环和异常  # Kotlin try catch异常处理i详解  # 抛出  # 多个  # 是一个  # 自定义  # 为空  # 自己的  # 返回值  # 段内  # 是在  # 就必须  # 还可以  # 最多  # 将在  # 是由  # 会在  # 并在  # 要在  # 而不  # 只会  # 希望能 


相关文章: 网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  建站之星免费模板:自助建站系统与智能响应式一键生成  唐山网站制作公司有哪些,唐山找工作哪个网站最靠谱?  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  制作农业网站的软件,比较好的农业网站推荐一下?  天津个人网站制作公司,天津网约车驾驶员从业资格证官网?  如何通过宝塔面板实现本地网站访问?  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  如何快速搭建自助建站会员专属系统?  大连网站制作公司哪家好一点,大连买房网站哪个好?  品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?  微网站制作教程,我微信里的网站怎么才能复制到浏览器里?  小程序网站制作需要准备什么资料,如何制作小程序?  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  怀化网站制作公司,怀化新生儿上户网上办理流程?  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  如何高效利用亚马逊云主机搭建企业网站?  如何制作网站标识牌,动态网站如何制作(教程)?  如何快速使用云服务器搭建个人网站?  网站制作报价单模板图片,小松挖机官方网站报价?  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?  如何选择适合PHP云建站的开源框架?  网站制作公司排行榜,四大门户网站排名?  网站制作培训多少钱一个月,网站优化seo培训课程有哪些?  建站之星导航配置指南:自助建站与SEO优化全解析  大型企业网站制作流程,做网站需要注册公司吗?  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  官网自助建站平台指南:在线制作、快速建站与模板选择全解析  制作网站怎么制作,*游戏网站怎么搭建?  盘锦网站制作公司,盘锦大洼有多少5G网站?  深入理解Android中的xmlns:tools属性  如何基于云服务器快速搭建网站及云盘系统?  金*站制作公司有哪些,金华教育集团官网?  做企业网站制作流程,企业网站制作基本流程有哪些?  如何用已有域名快速搭建网站?  建站之星安装后如何配置SEO及设计样式?  如何通过虚拟主机快速搭建个人网站?  建站之星官网登录失败?如何快速解决?  C++ static_cast和dynamic_cast区别_C++静态转换与动态类型安全转换  宝塔Windows建站如何避免显示默认IIS页面?  如何选择美橙互联多站合一建站方案?  黑客入侵网站服务器的常见手法有哪些?  如何在云主机上快速搭建网站?  定制建站如何定义?其核心优势是什么?  建站org新手必看:2024最新搭建流程与模板选择技巧  高性能网站服务器配置指南:安全稳定与高效建站核心方案  宝塔新建站点为何无法访问?如何排查?  广州网站设计制作一条龙,广州巨网网络科技有限公司是干什么的?  如何用wdcp快速搭建高效网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。