Dart 异常详解

生命不可能有两次,但许多人连一次也不善于度过 —— 吕凯特

Dart 异常详解

异常这个机制是必须存在的,大部分的高级语言都会带有的异常检查机制或者错误检查机制的,如果没有异常和错误检查机制的话,那么出现了问题那么程序就运行不了了,那岂不是很尴尬,或者如果出现了超时异常这种,如果有异常机制的话,那么就进行超时异常进行捕获之后再进行重试机制等等

Dart 提供的异常

Dart 代码可以抛出和捕获异常。 异常表示一些未知的错误情况。 如果异常没有被捕获, 则异常会抛出, 导致抛出异常的代码终止执行。和 Java 有所不同, Dart 中的所有异常是非检查异常。 方法不会声明它们抛出的异常, 也不要求捕获任何异常,Dart 提供了 ExceptionError类型, 以及一些子类型。 当然也可以定义自己的异常类型。 但是,此外 Dart 程序可以抛出任何非 null对象, 不仅限 ExceptionError对象    Dart 核心库定义了很多公共的 异常错误类。 异常通常是一些可以预见和预知的情况。 错误是无法预见或者预防的情况

语法

抛出异常 throw

下面是关于抛出或者引发异常的示例:

语法
throw 异常类型; 

也可以进行任何对象进行抛出

throw 'Out of llamas!'; 

高质量的生产环境代码通常会实现 ErrorException类型的异常抛出

捕获异常

捕获异常可以避免异常继续传递,可以通过 try catch进行捕获异常的机会来处理该异常,通过指定多个 catch语句,可以处理可能抛出多种类型异常的代码。

语法
try {方法内容
} on 异常名称 {异常处理} 

与抛出异常类型匹配的第一个 catch语句处理异常。 如果 catch语句未指定类型, 则该语句可以处理任何类型的抛出对象,捕获语句中可以同时使用 oncatch,也可以单独分开使用。 使用 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 提供的异常处理机制和其他大部分程序语言相同,还是挺健全的,这样方便了程序的开发和容错机制,大大的提供了程序的健壮性

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值