简介

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/

最艰深的解读,最粗浅的干货,最简洁的教程,泛滥你不晓得的小技巧等你来发现!

欢送关注我的公众号:「程序那些事」,懂技术,更懂你!