异常是表示发生了意外的错误,若是没有捕获异常,引起异常的隔离程序将被挂起,而且程序将被终止;html
Dart代码能够抛出并捕获异常,但与java相反,Dart的全部异常都是未检查的异常,方法不声明它们可能抛出哪些异常,也不须要捕获任何异常;java
Dart提供了异常和错误类型以及许多预约义的子类型,固然,也能够定义本身的异常,然而,Dart成语能够抛出任何非空对象;post
下面是一个抛出或引起异常的例子:学习
throw FormatException('抛出一个FormatException异常'); //你也能够抛出任意对象 throw '数据非法!';
你能够指定一个或两个参数来捕获异常(catch),第一个是抛出的异常,第二个是堆栈跟踪(StackTrace对象)。以下面代码所示:url
try{ //逻辑代码操做 } on Exception catch (e){ print('exception details:\n $e'); }catch (e,s){ print('exception details:\n $e'); print('stack trace:\n $s'); } //上面的代码第一个catch用来捕获异常详细信息,第二个catch是堆栈跟踪信息
要确保某些代码可以运行,不管是否抛出异常,请使用finally子句,若是没有catch子句匹配异常,则异常在finally子句运行后传播,以下面代码所示,在最下面加上了finally语句:spa
try{ //逻辑代码操做 } on Exception catch (e){ print('exception details:\n $e'); }catch (e,s){ print('exception details:\n $e'); print('stack trace:\n $s'); }finally{ print(''Do sth); }
下一章节:Flutter学习笔记(8)--Dart面向对象code