1. 异常的定义
Dart的异常处理机制参考了Java语言的异常处理机制。
与Java语言不同的是,Dart中不存在检查性异常的概念,所有的异常都可以理解为是Java语言的运行时异常,也就是说程序不会强制要求编程者处理异常,但若发生异常,则程序中断执行。
Dart主要分为Error
和Exception
两种类型。
2. 抛出异常
与Java中抛出异常的方式一致,使用throw
关键字可以抛出一个异常。
throw RangeError("下标越界");
与Java不同的是,Dart允许抛出任意对象作为异常,但一般不建议这么做。
throw "下标越界";
3. 捕获异常
使用on 异常类型 catch(异常对象)
句式捕获异常
main() {
try {
test();
} on RangeError catch(e){
print(e);
}on Error catch(e){
print(e);
}
}
test(){
throw RangeError("下标越界");
}
4. 重新抛出
使用rethrow
句式可以在捕获异常后重新抛出异常。比如Java中MVC模式在DAO层捕获异常后需要重新上报异常给Service层进行事务处理,此时在DAO的代码中的catch中需要重新throw异常,类似情况可以使用rethrow直接重新上报异常。
main() {
try {
test();
} on RangeError catch(e){
print(e);
rethrow;
}
}
test(){
throw RangeError("下标越界");
}
5. 最终处理
同Java语言一致,利用finally代码块作为异常处理的最终块,无论如何都会执行finally中的代码。
适用于类似回收资源,关闭stream等类似操作。
使用方式:
try{
...
}finally{
...
}
或
try{
...
}on Error catch(e){
...
}finally{
...
}
网友评论