写点什么

dart 系列之:dart 语言中的异常

作者:程序那些事
  • 2021 年 11 月 12 日
  • 本文字数:1300 字

    阅读完需:约 4 分钟

dart系列之:dart语言中的异常

简介

Exception 是程序中的异常情况,在 JAVA 中 exception 有 checked Exception 和 unchecked Exception。那么在 dart 中的情况是不是一样的呢?一起来看看吧。

Exception 和 Error

Dart 中表示异常的类有两个,分别是 Exception 和 Error。他们两个有什么区别呢?

Exception 是由 VM 或者 dart code 中抛出的。

Exception 主要用来表示用户程序编写过程中产生的异常,是可以定位到的可以解决的异常。通常来说 Exception 中包含了足够的信息来方便用户来定位异常点。

所以 Exception 通常是需要被 catch 的。但是和 java 不同的是,dart 中所有的异常都是 unchecked 异常,也就是说 dart 中的异常并不强制要求被捕获,是否捕获异常是由程序员自行决定的。

构造一个异常很简单,如下所示:

Exception("message")
复制代码

但是 dart 并不推荐这样使用,因为这样构造的异常太过通用了,即使捕获到这样的异常,可以获得信息也比较少。所以 dart 推荐抛出自定义异常,也就是说根据业务需要去创建 Exception 对应的类,然后根据业务需要进行抛出。

dart 中也有很多 Exception 的子类,比如 FormatException 来表示各种不同的异常情形。

同样的,在 JAVA 中也是这样推荐的,不要直接抛出 Exception,而是根据业务需要抛出自定义的异常。

和 JAVA 一样,dart 中的 Error 表示的是一个严重的错误,Error 是应该在程序编写过程中需要避免的。

dart 中的 Error 并不需要被捕获,因为发生了 Error 就表示程序出现了非常严重的错误,已经无法运行下去了。

所以 Error 是我们在程序编写过程中需要避免的。

Throw 和 catch

如果程序产生了异常,则可以使用 Throw 语句将其抛出,然后在合适的地方使用 catch 进行捕获。

比如我们 throw 一个格式异常:

throw FormatException('这是一个格式异常');
复制代码

但是在 dart 中,不仅仅可以 throw Exception 或者 Error,任何一个 Object 都可以 throw 出去,如下所示:

throw "这是一个异常!";
复制代码

抛出的异常可以使用 catch 来捕获:

try{    do something}catch(e){
}
复制代码

dart 也可以捕获特定的异常,这种情况用 on 语句来表示,如下:

try {  someException();} on OutOfIndexException {  // 捕获特定的异常  doSomething();} on Exception catch (e) {  // 捕获其他的Exception  print('其他的异常: e');} catch (e) {  // 处理剩下的异常  print('剩下的异常:e');}
复制代码

dart 中的 catch 可以指定两个参数,第一个参数就是 throw 的异常,第二个参数是 StackTrace 对象:

try {} catch (e, s) {  print('异常信息: e');  print('堆栈信息:s');}
复制代码

在处理完异常之后,如果想要再将其抛出,可以使用 rethrow:

void doSomething(){    try{    }catch (e) {    print('get exception');    rethrow; // rethrow这个异常  }}
复制代码

Finally

和 JAVA 一样,dart 中也有 Finally,用来进行最终的处理。Finally 会在所有的 catch 语句执行完毕之后执行:

try {  doSomething();} catch (e) {  print('Error: $e'); } finally {  cleanUpJob(); // 最后的清理工作}
复制代码

总结

以上就是 dart 中的异常和对异常的处理。

本文已收录于 http://www.flydean.com/05-dart-exception/

最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!

欢迎关注我的公众号:「程序那些事」,懂技术,更懂你!

发布于: 9 小时前阅读数: 7
用户头像

关注公众号:程序那些事,更多精彩等着你! 2020.06.07 加入

最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧,尽在公众号:程序那些事!

评论

发布
暂无评论
dart系列之:dart语言中的异常