文章目录

  • 简介
  • Exception和Error
  • Throw和catch
  • Finally
  • 总结

简介

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) {// 捕获其他的Exceptionprint('其他的异常: $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/

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

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

dart系列之:dart语言中的异常相关推荐

  1. dart系列之:dart语言中的特殊操作符

    dart系列之:dart语言中的特殊操作符 文章目录 简介 普通操作符 类型测试操作符 条件运算符 级联符号 类中的自定义操作符 总结 简介 有运算就有操作符,dart中除了普通的算术运算的操作符之外 ...

  2. c++中的异常--1(基本概念, c语言中处理异常,c++中处理异常,异常的基本使用,栈解旋)

    异常基本概念 异常处理就是处理程序中的错误,所谓错误是指在程序运行的过程中发生的一些异常事件(如:除0退出,数组下标越界,所要读取的文件不存在,空指针,内存不足等等) c语言中处理异常 两种方法: 使 ...

  3. JAVA语言异常,Java语言中的异常

    1.异常分类 从产生源头来看,Java语言中的异常可以分为两类: JVM抛出的异常.比如:访问null引用会引发NullPointerException:0作为除数,如9/0,JVM会抛出Arithm ...

  4. JAVA语言异常_Java语言中常用异常类EoFException是用来处理( )异常的类_学小易找答案...

    [填空题]Java语言中常用异常类ClassNotFoundException是用来处理 ( )的异常的类 [填空题]Java语言声明 ( ) 类为会产生"严重错误"的类 [简答题 ...

  5. dart系列之:dart类中的泛型

    文章目录 简介 为什么要用泛型 怎么使用泛型 类型擦除 泛型的继承 泛型方法 总结 简介 熟悉JAVA的朋友可能知道,JAVA在8中引入了泛型的概念.什么是泛型呢?泛型就是一种通用的类型格式,一般用在 ...

  6. dart系列之:dart代码规范实践指南

    文章目录 简介 命名规则 import中的顺序 格式化 总结 简介 每种语言都有自己的代码风格,这种代码风格是跟语言特性息息相关的.如果在编码的过程中遵循这种统一的编码规则,会给我们的业务带来非常多的 ...

  7. go http 处理w.write 错误_Go语言中的异常和错误处理简介

    女主宣言 异常和错误处理在保证程序的鲁棒性方面起到了至关重要的作用.C++.Java.Python中的异常和错误处理都是比较类似的,可以用try-catch逻辑操作,但是Go中的异常处理却有别于以上三 ...

  8. Go语言中的异常和错误处理简介

    女主宣言 异常和错误处理在保证程序的鲁棒性方面起到了至关重要的作用.C++.Java.Python中的异常和错误处理都是比较类似的,可以用try-catch逻辑操作,但是Go中的异常处理却有别于以上三 ...

  9. dart系列之:dart语言中的变量

    文章目录 简介 dart中的变量 定义变量 变量的默认值 Late变量 常量 总结 简介 flutter是google在2015年dart开发者峰会上推出的一种开源的移动UI构建框架,使用flutte ...

最新文章

  1. JVM运行时数据区---堆(堆内存)
  2. The Memory Managerment of the Computer
  3. 给这台华为S5700交换机配一下链路聚合
  4. MyBatis中编写sql语句小于号报错
  5. java成员变量垃圾回收_JAVA 对象被垃圾回收后其成员变量可用吗? | 学步园
  6. php生成appid,PHP生成腾讯云COS签名
  7. PostgreSQL 自定义复合类型(composite type) deform引入的额外开销
  8. 2020年日历电子版(打印版)_灵感 | 快来康康——2020年的日历设计的这么有创意?...
  9. C/C++常见标准头文件前格式探讨
  10. 【转】【OPenGL】OPenGL 画图板-- 中点算法画圆
  11. SQL:postgresql中判断一个点是否落在指定区域
  12. 天联无法ping通服务器地址_金万维天联标准版无法连接,怎么办?
  13. git 修改命令 VI
  14. threejs全景图片展示
  15. 【电子学会】2022年09月图形化一级 -- 猫捉老鼠
  16. 码农故事2——岁前落脚得安定 年后求职寻转机
  17. 想做刷爆TikTok的短视频?这8种特效一定要用到
  18. This primary key of id is primitive 不建议如此请使用包装类 in Class
  19. linux下dynamips 与vpcs通信的实现
  20. 2021-10-08 2021年起重机司机(限门式起重机)考试题库及起重机司机(限门式起重机)最新解析

热门文章

  1. 无法全新安装_好墙板更需好安装:护墙板安装新方法
  2. HDU4514(非连通图的环判断与图中最长链)
  3. [bzoj1547]周末晚会
  4. Python selenium对js元素进行增删改查操作
  5. 使用mybatis-generator自动生成代码的方法介绍及踩坑
  6. 那些做了十年的老开发都去哪了?
  7. Union-Find 算法应用
  8. LiveVideoStackCon 2020北京站-售票通道关闭倒计时2天
  9. LiveVideoStackCon讲师热身分享 ( 八 ) —— FFmpeg的滤镜在视频编辑场景中的应用
  10. LiveVideoStackCon讲师热身分享 ( 五 ) —— 建立中国自主视频技术生态