Kotlin 基础教程之异常
发布时间 - 2026-01-11 01:43:42 点击率:次Kotlin 基础教程之异常

概述
在Kotlin-null的处理里提到的NPE,它就是一个异常。而,异常是程序运行过程中出现的错误。在Kotlin中,所有的异常都继承于Throwable。对于每一个异常而言,它不仅仅包括异常的信息,还可以选择性包括异常的原因,而其原因也是一个异常的实例。
抛出异常
使用 throw表达式抛出异常:
throw MyException("Hi There!")
捕获异常
如果在函数内部抛出了异常(或者在函数内部调用的其他函数抛出了异常),这个函数将在抛出异常的地方结束。如果不希望函数结束,此时就必须捕获这个被抛出的异常并处理这个异常。
在Kotlin中,要捕获异常, 可以使用 try 表达式:
try {
// 某些代码
}
catch (e: SomeException) {
// 异常处理
}
finally {
// 可选的 finally 代码段
}
- try语句块:表示要尝试运行代码,try语句块中代码受异常监控,其中代码发生异常时,会抛出异常对象。
- catch语句块:会捕获try代码块中发生的异常并在其代码块中做异常处理,catch语句带一个Throwable类型的参数,表示可捕获异常类型。当try中出现异常时,catch会捕获到发生的异常,并和自己的异常类型匹配, 若匹配,则执行catch块中代码,并将catch块参数指向所抛的异常对象。catch语句可以有多个, 用来匹配多个中的一个异常,一旦匹上配后,就不再尝试匹配别的catch块了。 通过异常对象可以获取异常发生时完整的JVM堆栈信息,以及异常信息和异常发生的原因等。
- finally语句块:紧跟catch语句后的语句块,这个语句块总是会在方法返回前执行,而不管是否try语句块是否发生异常。并且这个语句块总是在方法返回前执行。 目的是给程序一个补救的机会。这样做也体现了Java语言的健壮性。
注:
- try、catch、finally三个语句块均不能单独使用,三者可以组成 try…catch…finally、try…catch、try…finally三种结构,catch语句可以有一个或多个,finally语句最多一个。
- try、catch、finally三个代码块中变量的作用域为代码块内部,分别独立而不能相互访问。如果要在三个块中都可以访问,则需要将变量定义到这些块的外面。
- 多个catch块时候,只会匹配其中一个异常类并执行catch块代码,而不会再执行别的catch块,并且匹配catch语句的顺序是由上到下。
- 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详解
# 抛出
# 多个
# 是一个
# 自定义
# 为空
# 自己的
# 返回值
# 段内
# 是在
# 就必须
# 还可以
# 最多
# 将在
# 是由
# 会在
# 并在
# 要在
# 而不
# 只会
# 希望能
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置
如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体
网站制作大概多少钱一个,做一个平台网站大概多少钱?
HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】
如何快速搭建高效可靠的建站解决方案?
制作公司内部网站有哪些,内网如何建网站?
大同网页,大同瑞慈医院官网?
猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】
Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】
非常酷的网站设计制作软件,酷培ai教育官方网站?
如何快速搭建支持数据库操作的智能建站平台?
如何快速辨别茅台真假?关键步骤解析
Java解压缩zip - 解压缩多个文件或文件夹实例
如何快速上传建站程序避免常见错误?
Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势
JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)
javascript日期怎么处理_如何格式化输出
Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置
Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)
在线教育网站制作平台,山西立德教育官网?
google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤
如何在阿里云域名上完成建站全流程?
黑客如何利用漏洞与弱口令入侵网站服务器?
如何获取PHP WAP自助建站系统源码?
微信小程序 require机制详解及实例代码
php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】
企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?
在Oracle关闭情况下如何修改spfile的参数
制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?
什么是JavaScript解构赋值_解构赋值有哪些实用技巧
laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法
香港服务器租用每月最低只需15元?
lovemo网页版地址 lovemo官网手机登录
详解jQuery中的事件
Laravel如何实现API版本控制_Laravel API版本化路由设计策略
HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】
教你用AI将一段旋律扩展成一首完整的曲子
Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】
Laravel如何实现数据导出到CSV文件_Laravel原生流式输出大数据量CSV【方案】
Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理
Laravel集合Collection怎么用_Laravel集合常用函数详解
Laravel如何记录自定义日志?(Log频道配置)
如何用已有域名快速搭建网站?
Laravel如何实现数据库事务?(DB Facade示例)
利用 Google AI 进行 YouTube 视频 SEO 描述优化
如何在阿里云部署织梦网站?
网站制作免费,什么网站能看正片电影?
简历在线制作网站免费版,如何创建个人简历?
深入理解Android中的xmlns:tools属性
夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化

