乐趣区

关于dart: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/

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

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

退出移动版