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的异步编 ...
随机推荐
- 剑指offer计划27(栈与队列困难)---java
1.1.题目1 剑指 Offer 59 - I. 滑动窗口的最大值 1.2.解法 解题思路:(来自作者bigbeats) 相当于维护一个最大队列(队头元素最大,向队尾非严格递减) 在未形成窗口前,先构 ...
- Microfacet模型采样下的brdf
本文前言 在学习图形学(games101 from bilibili)的时候,也遇到了像这样的问题,Cook-Torrance模型无法实现粗糙度为0时,物体微表面呈现绝对镜面的效果(呈现出一面镜子), ...
- Mybatis逆向工程和新版本MybatisPlus3.4逆向工程的使用
Mybatis和MybatisPlus3.4的使用 目录 Mybatis和MybatisPlus3.4的使用 1 RESTFUL 2 逆向工程 2.1 tkMybatis逆向工程 2.1.1 导入依赖 ...
- 【vue】两个页面间传参 - props
目录 Step1 设置可以 props 传递数据 Step2 跳转前页面中传递数据 Step3 跳转后的页面接收数据 从 A 页面跳转到 B 页面, 参数/数据通过 props 传递到 B 页面,这种 ...
- canvas 实现简单的画板功能添加手机端效果 1.01
在上次的基础上,加了一些代码,手机端可操作 访问网址:https://chandler712.github.io/Item/ <!-- 简单版画板 --> <!DOCTYPE htm ...
- Apache Dubbo理解和应用
官网:https://dubbo.apache.org/ slogan:高性能.轻量级的开源Java RPC框架 提供了六大核心能力:面向接口代理的高性能RPC调用,智能容错和负载均衡,服务自动注册和 ...
- Android QMUI实战:沉浸式/适配状态栏
近期研究QMUI换肤的实现,顺便分析了下QMUI的沉浸式. 网上已有很多关于QMUI实现页面沉浸式的文章,简而言之:复杂了. 本期,我们仅通过几行代码,即可完美实现页面沉浸式效果,并轻松匹配换肤的色彩 ...
- Java(26)集合一Collection
来源:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15228419.html 博客主页:https://www.cnblogs.com/testero ...
- 使用.NET(C#或VB.NET)开发NX外部程序
1.如何不用将exe程序拷贝到UGII目录下运行? 答:在调用NX Open命令函数前,将当前目录移动到NX安装目录\UGII\,NX安装目录必须和环境变量UGII_BASE_DIR的值一致,否则报错 ...
- pycharm安装第三方库
https://jingyan.baidu.com/article/4853e1e54b845e1909f7268f.html