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