dart系列之:dart语言中的异常
文章目录
- 简介
- 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语言中的异常相关推荐
- dart系列之:dart语言中的特殊操作符
dart系列之:dart语言中的特殊操作符 文章目录 简介 普通操作符 类型测试操作符 条件运算符 级联符号 类中的自定义操作符 总结 简介 有运算就有操作符,dart中除了普通的算术运算的操作符之外 ...
- c++中的异常--1(基本概念, c语言中处理异常,c++中处理异常,异常的基本使用,栈解旋)
异常基本概念 异常处理就是处理程序中的错误,所谓错误是指在程序运行的过程中发生的一些异常事件(如:除0退出,数组下标越界,所要读取的文件不存在,空指针,内存不足等等) c语言中处理异常 两种方法: 使 ...
- JAVA语言异常,Java语言中的异常
1.异常分类 从产生源头来看,Java语言中的异常可以分为两类: JVM抛出的异常.比如:访问null引用会引发NullPointerException:0作为除数,如9/0,JVM会抛出Arithm ...
- JAVA语言异常_Java语言中常用异常类EoFException是用来处理( )异常的类_学小易找答案...
[填空题]Java语言中常用异常类ClassNotFoundException是用来处理 ( )的异常的类 [填空题]Java语言声明 ( ) 类为会产生"严重错误"的类 [简答题 ...
- dart系列之:dart类中的泛型
文章目录 简介 为什么要用泛型 怎么使用泛型 类型擦除 泛型的继承 泛型方法 总结 简介 熟悉JAVA的朋友可能知道,JAVA在8中引入了泛型的概念.什么是泛型呢?泛型就是一种通用的类型格式,一般用在 ...
- dart系列之:dart代码规范实践指南
文章目录 简介 命名规则 import中的顺序 格式化 总结 简介 每种语言都有自己的代码风格,这种代码风格是跟语言特性息息相关的.如果在编码的过程中遵循这种统一的编码规则,会给我们的业务带来非常多的 ...
- go http 处理w.write 错误_Go语言中的异常和错误处理简介
女主宣言 异常和错误处理在保证程序的鲁棒性方面起到了至关重要的作用.C++.Java.Python中的异常和错误处理都是比较类似的,可以用try-catch逻辑操作,但是Go中的异常处理却有别于以上三 ...
- Go语言中的异常和错误处理简介
女主宣言 异常和错误处理在保证程序的鲁棒性方面起到了至关重要的作用.C++.Java.Python中的异常和错误处理都是比较类似的,可以用try-catch逻辑操作,但是Go中的异常处理却有别于以上三 ...
- dart系列之:dart语言中的变量
文章目录 简介 dart中的变量 定义变量 变量的默认值 Late变量 常量 总结 简介 flutter是google在2015年dart开发者峰会上推出的一种开源的移动UI构建框架,使用flutte ...
最新文章
- JVM运行时数据区---堆(堆内存)
- The Memory Managerment of the Computer
- 给这台华为S5700交换机配一下链路聚合
- MyBatis中编写sql语句小于号报错
- java成员变量垃圾回收_JAVA 对象被垃圾回收后其成员变量可用吗? | 学步园
- php生成appid,PHP生成腾讯云COS签名
- PostgreSQL 自定义复合类型(composite type) deform引入的额外开销
- 2020年日历电子版(打印版)_灵感 | 快来康康——2020年的日历设计的这么有创意?...
- C/C++常见标准头文件前格式探讨
- 【转】【OPenGL】OPenGL 画图板-- 中点算法画圆
- SQL:postgresql中判断一个点是否落在指定区域
- 天联无法ping通服务器地址_金万维天联标准版无法连接,怎么办?
- git 修改命令 VI
- threejs全景图片展示
- 【电子学会】2022年09月图形化一级 -- 猫捉老鼠
- 码农故事2——岁前落脚得安定 年后求职寻转机
- 想做刷爆TikTok的短视频?这8种特效一定要用到
- This primary key of id is primitive 不建议如此请使用包装类 in Class
- linux下dynamips 与vpcs通信的实现
- 2021-10-08 2021年起重机司机(限门式起重机)考试题库及起重机司机(限门式起重机)最新解析
热门文章
- 无法全新安装_好墙板更需好安装:护墙板安装新方法
- HDU4514(非连通图的环判断与图中最长链)
- [bzoj1547]周末晚会
- Python selenium对js元素进行增删改查操作
- 使用mybatis-generator自动生成代码的方法介绍及踩坑
- 那些做了十年的老开发都去哪了?
- Union-Find 算法应用
- LiveVideoStackCon 2020北京站-售票通道关闭倒计时2天
- LiveVideoStackCon讲师热身分享 ( 八 ) —— FFmpeg的滤镜在视频编辑场景中的应用
- LiveVideoStackCon讲师热身分享 ( 五 ) —— 建立中国自主视频技术生态