仓颉开发之——异常(14)
一 概述
- 定义异常
- 处理异常
- 常见运行时异常
- 使用 Option
二 定义异常
2.1 概念
- 异常是一类特殊的可以被程序员捕获并处理的错误
2.2 异常分类
1-Error
- 系统内部错误和资源耗尽错误
- 应用程序不应该抛出这种类型错误
- 如果出现内部错误,只能通知给用户,尽量安全终止程序
2-Exception
- 程序运行时的逻辑错误或者 IO 错误导致的异常
- 这类异常需要在程序中捕获处理
2.3 定义异常
- 自定义类<: Exception
- open class FatherException <: Exception {public open func printException() {}}
三 处理异常
3.1 throw抛出异常
- throw 之后的表达式必须是 Exception 的子类型
- throw 关键字抛出的异常需要被捕获处理
- throw NegativeArraySizeException("I am an Exception!")
3.2 try处理异常
1-普通try表达式
- 三个部分:try 块,catch 块和 finally 块
- try 后面紧跟的块以及每个 catch 块的的作用域互相独立
- try {throw Exception("Exception") } catch (e: Exception) { } finally { }
2-Try-with-resources 表达式
- 主要是为了自动释放非内存资源
- try-with-resources 表达式中的 catch 块和 finally 块均是可选的
- 此类要继承Resource ,并实现isClosed()和close()方法
- 自定义类继承Resource:class R <: Resource {public func isClosed(): Bool {true }public func close(): Unit { }}
3-CatchPattern 进阶
- 1-类型模式:catch (e: IllegalArgumentException | NegativeArraySizeException)
- 2-通配符模式:catch (_) {}
四 常见运行时异常
- ConcurrentModificationException:并发修改产生的异常
- IllegalArgumentException:传递不合法或不正确参数时抛出的异常
- NegativeArraySizeException: 创建大小为负的数组时抛出的异常
- NoneValueException:值不存在时产生的异常,如 Map 中不存在要查找的 key
- OverflowException:算术运算溢出异常
五 使用 Option
5.1 原因
- Option 类型可以同时表示有值和无值两种状态
- 无值在某些情况下也可以理解为一种错误,所以 Option 类型也可以用作错误处理
5.2 使用场景
- 模式匹配
- coalescing 操作符(??)
- 问号操作符(?)
- getOrThrow 函数
六 思维导图
七 参考
- 仓颉官方文档—异常
- 仓颉编程语言入门教程