当前位置:网站首页>Dart 异常详解
Dart 异常详解
2022-08-01 05:39:00 【蚂蚁二娘】
生命不可能有两次,但许多人连一次也不善于度过 —— 吕凯特
Dart 异常详解
异常这个机制是必须存在的,大部分的高级语言都会带有的异常检查机制或者错误检查机制的,如果没有异常和错误检查机制的话,那么出现了问题那么程序就运行不了了,那岂不是很尴尬,或者如果出现了超时异常这种,如果有异常机制的话,那么就进行超时异常进行捕获之后再进行重试机制等等
Dart 提供的异常
Dart 代码可以抛出和捕获异常。 异常表示一些未知的错误情况。 如果异常没有被捕获, 则异常会抛出, 导致抛出异常的代码终止执行。和 Java 有所不同, Dart 中的所有异常是非检查异常。 方法不会声明它们抛出的异常, 也不要求捕获任何异常,Dart 提供了 Exception和 Error类型, 以及一些子类型。 当然也可以定义自己的异常类型。 但是,此外 Dart 程序可以抛出任何非 null对象, 不仅限 Exception 和 Error对象 Dart 核心库定义了很多公共的 异常和错误类。 异常通常是一些可以预见和预知的情况。 错误是无法预见或者预防的情况
语法
抛出异常 throw
下面是关于抛出或者引发异常的示例:
语法
throw 异常类型;
也可以进行任何对象进行抛出
throw 'Out of llamas!';
高质量的生产环境代码通常会实现 Error或 Exception类型的异常抛出
捕获异常
捕获异常可以避免异常继续传递,可以通过 try catch进行捕获异常的机会来处理该异常,通过指定多个 catch语句,可以处理可能抛出多种类型异常的代码。
语法
try {方法内容
} on 异常名称 {异常处理}
与抛出异常类型匹配的第一个 catch语句处理异常。 如果 catch语句未指定类型, 则该语句可以处理任何类型的抛出对象,捕获语句中可以同时使用 on和 catch,也可以单独分开使用。 使用 on 来指定异常类型, 使用 catch 来 捕获异常对象【这点和java不同,Java都是利用该catch进行异常捕获的】,catch() 函数可以指定1到2个参数, 第一个参数为抛出的异常对象, 第二个为堆栈信息
try {方法块
} on TimeOutException {// 一个特殊的异常异常处理
} on Exception catch (e) {// 其他任何异常print('Unknown exception: $e');
} catch (e,s) {// 没有指定的类型,处理所有异常,并打印堆栈信息print('Something really unknown: $e, stach :$s');
}
finally
最终执行,不管是否抛出异常, finally 中的代码都会被执行【这一点和java一摸一样,不管什么情况都会执行finally语句块中的语法】。 如果 catch 没有匹配到异常, 异常会在 finally 执行完成后,再次被抛出
语法
try {方法块
} finally {最终执行的语句
}
任何匹配的 catch 执行完成后,再执行 finally :
try {代码块
} catch (e) {异常捕获后进行处理
} finally {最终代码执行
}
异常类型
要想进行彻底的学习的话,需要进行 dart:core 核心库的研究,他内部提供了很多的异常类型,当然了也可以自定义异常不过需要实现 Exception 接口
Error
常见 Error
1.NoSuchMethodError【方法异常】
当方法的接受对象(可能为null)没有实现该方法时抛出。
2.ArgumentError【参数异常】
当方法在接受到一个不合法参数时抛出。
自定义异常
class 自定义异常名称 implements Exception {final String msg;const 自定义异常名称([this.msg]);@overrideString toString() => msg ?? '自定义异常名称';
}
总结
Dart 提供的异常处理机制和其他大部分程序语言相同,还是挺健全的,这样方便了程序的开发和容错机制,大大的提供了程序的健壮性
边栏推荐
猜你喜欢

戴尔PowerEdge服务器R450 RAID配置步骤

Flip letters using string container

WPF项目-初步了解数据绑定 binding

Hunan institute of technology in 2022 ACM training sixth week antithesis

Robot growth in China

JWL-11/2-99.9A电流继电器

LeetCode 0149. Maximum number of points on a line

可视化全链路日志追踪

Win任务栏图标异常解决

AspNet.WebApi.Owin custom Token request parameters
随机推荐
Windows taskbar icon abnormal solution
The BP neural network based on MATLAB voice characteristic signal classification
LeetCode 0149. Maximum number of points on a line
matplotlib pyplot
DL-31/6电流继电器
Selenium: form switching
Selenium: Introduction
牛客多校2022第四场A,H,K,N
matlab wind speed model wavelet filtering
NDK does not contain any platforms problem solving
matlab simulink 粒子群优化模糊pid控制的电机泵
Robot_Framework:常用内置关键字
深度比较两个对象是否相同
The solution to the inconsistency between the PaddleX deployment inference model and the GUI interface test results
Qt Widget project loading example of qml
More than 2022 cattle guest school game 4 yue
The sword refers to Offer 68 - I. Nearest Common Ancestor of Binary Search Trees
Selenium:操作Cookie
【MySQL必知必会】 表的优化 | 充分利用系统资源
【翻译】确保云原生通信的安全:从入口到服务网及更远的地方