简介
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/
最艰深的解读,最粗浅的干货,最简洁的教程,泛滥你不晓得的小技巧等你来发现!
欢送关注我的公众号:「程序那些事」,懂技术,更懂你!