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/
最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!
欢迎关注我的公众号:「程序那些事」,懂技术,更懂你!
dart系列之:dart语言中的异常的更多相关文章
- dart系列之:dart语言中的特殊操作符
dart系列之:dart语言中的特殊操作符 目录 简介 普通操作符 类型测试操作符 条件运算符 级联符号 类中的自定义操作符 总结 简介 有运算就有操作符,dart中除了普通的算术运算的操作符之外,还 ...
- dart系列之:dart类中的泛型
目录 简介 为什么要用泛型 怎么使用泛型 类型擦除 泛型的继承 泛型方法 总结 简介 熟悉JAVA的朋友可能知道,JAVA在8中引入了泛型的概念.什么是泛型呢?泛型就是一种通用的类型格式,一般用在集合 ...
- dart系列之:dart代码最佳实践
目录 简介 命名规则 import中的顺序 格式化 总结 简介 每种语言都有自己的代码风格,这种代码风格是跟语言特性息息相关的.如果在编码的过程中遵循这种统一的编码规则,会给我们的业务带来非常多的便利 ...
- dart系列之:dart语言中的变量
目录 简介 dart中的变量 定义变量 变量的默认值 Late变量 常量 总结 简介 flutter是google在2015年dart开发者峰会上推出的一种开源的移动UI构建框架,使用flutter可 ...
- dart系列之:dart语言中的内置类型
目录 简介 Null 数字 字符串 布尔值 列表 set和map 简介 和所有的编程语言一样,dart有他内置的语言类型,这些内置类型都继承自Object,当然这些内置类型是dart语言的基础,只有掌 ...
- dart系列之:dart语言中的函数
目录 简介 函数的参数 main函数 匿名函数 闭包 函数的返回值 总结 简介 函数是所有编程语言都有的内容,不管是面向对象还是面向过程,函数都是非常重要的一部分.dart中的函数和java中的函数有 ...
- dart系列之:dart类中的构造函数
目录 简介 传统的构造函数 命名构造函数 构造函数的执行顺序 重定向构造函数 Constant构造函数 工厂构造函数 总结 简介 dart作为一种面向对象的语言,class是必不可少的.dart中所有 ...
- dart系列之:dart中的异步编程
目录 简介 为什么要用异步编程 怎么使用 Future 异步异常处理 在同步函数中调用异步函数 总结 简介 熟悉javascript的朋友应该知道,在ES6中引入了await和async的语法,可以方 ...
- dart系列之:dart优秀的秘诀-隔离机制
目录 简介 dart中的隔离机制 生成一个Isolate Isolate之间的交互 一个例子 总结 简介 之前介绍了很多dart中的异步编程技巧,不知道大家有没有发现一个问题,如果是在java的异步编 ...
随机推荐
- P4643-[国家集训队]阿狸和桃子的游戏【结论】
正题 题目链接:https://www.luogu.com.cn/problem/P4643 题目大意 给出\(n\)个点\(m\)条边的无向图,两个人轮流选择一个未被选择的点加入点集. 然后每个人的 ...
- [源码解析] PyTorch 流水线并行实现 (4)--前向计算
[源码解析] PyTorch 流水线并行实现 (4)--前向计算 目录 [源码解析] PyTorch 流水线并行实现 (4)--前向计算 0x00 摘要 0x01 论文 1.1 引论 1.1.1 数据 ...
- T-SQL——数据透视和逆透视
目录 0. 测试数据集及说明 0.1 准备测试数据 0.2 对一维表和二维表理解 1. 透视转换 1.1 使用标准SQL进行数据透视 1.2 使用T-SQL中pivot函数进行数据透视 1.3 关于 ...
- 【死磕NIO】— 阻塞IO,非阻塞IO,IO复用,信号驱动IO,异步IO,这你真的分的清楚吗?
通过上篇文章([死磕NIO]- 阻塞.非阻塞.同步.异步,傻傻分不清楚),我想你应该能够区分了什么是阻塞.非阻塞.异步.非异步了,这篇文章我们来彻底弄清楚什么是阻塞IO,非阻塞IO,IO复用,信号驱动 ...
- mysql 建表后 重新构建 自增字段 (保留 原有字段结构)
添加字段 1.去除原id的自增功能:ALTER TABLE A_A MODIFY COLUMN id int(10) NOT NULL FIRST ; 2.添加名称为cstId,类型为bigint的字 ...
- C#开发BIMFACE系列46 服务端API之离线数据包下载及结构详解
BIMFACE二次开发系列目录 [已更新最新开发文章,点击查看详细] 在前一篇博客<C#开发BIMFACE系列45 服务端API之创建离线数据包>中通过调用接口成功的创建一个离线数 ...
- 题解 [CTSC2006]歌唱王国
题目传送门 Desctiption 见题面. Solution 人类智慧... 考虑这样一个赌博游戏,现在有一个猴子,它随机从 \(1\sim n\) 中选一个打出来.现在有若干个赌徒,他们一开始都有 ...
- Java(13)详解构造方法
作者:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15201600.html 博客主页:https://www.cnblogs.com/testero ...
- print spooler LPF 打印机漏洞
打印机漏洞 该漏洞可以通过创建打印机驱动和端口,实现任意文件写入,用于提权或者写入后门. 打印机调用流程:client通过RPC调用server的spoolsv.exe,spoolsv.exe是sys ...
- CentOS 压缩解压
目录 命令 tar gzip.gunzip bzip2.bunzip2 zip.unzip 命令组合 打包:将多个文件合成一个总的文件,这个总的文件通常称为"归档". 压缩:将一个 ...