异常抛出之 Throw
- 抛出一个已知异常
//执行
print('<<<<<<<<<<<<<抛出异常前');
//执行
throw new FormatException('抛出异常!!!');
//或者: throw '抛出异常!!!';
//不执行
print('抛出异常前>>>>>>>>>>>>');
打印效果:
效果打印
从打印结果来看,一旦发生异常后面的逻辑就不会执行了。
Catch
- 普通捕获
print('<<<<<<<<<<<<<抛出异常前');
var initArray = [10, 20, 30, 40, 50];
try {
print('========= ${initArray[5]}');
} catch (e) {
print('try 异常错误 !' + e.toString());
}
print('>>>>>>>>>>>> try 异常捕获结束 !');
效果:
catch 捕获
用try 包含异常的代码,然后进行捕获。捕获后进行输出错误的代码提示,但是后面的代码依然执行。
- 使用 on 的关键词
print('<<<<<<<<<<<<<抛出异常前');
var initArray = [10, 20, 30, 40, 50];
try {
print('========= ${initArray[5]}');
} on RangeError {
print('====== on ${initArray[4]}');
} on FormatException {
print('FormatException');
} catch (e) {
print('try 异常错误提示 !' + e.toString());
}
print('>>>>>>>>>>>> try 异常捕获结束 !');
效果:
异常捕获
我们看到详细的错误信息没有打印,因为代码逻辑走到 on RangeError 分支,而输出的详细错误信息是作为默认异常处理才被执行的。
- 再次抛出异常 rethrow
print('<<<<<<<<<<<<<抛出异常前');
var initArray = [10, 20, 30, 40, 50];
try {
print('========= ${initArray[5]}');
} on RangeError {
print('====== on ${initArray[4]}');
rethrow;
} on FormatException {
print('FormatException');
} catch (e) {
print('try 异常错误提示 !' + e.toString());
}
print('>>>>>>>>>>>> try 异常捕获结束 !');
效果:
再次抛出异常并提示打印问题
我们看到当我们使用了 rethrow 后,我们的代码并没有对后面的逻辑进行执行,尤其是 catch 中的捕获,仅仅是给出了错误的原因。
Finally
print('<<<<<<<<<<<<<抛出异常前');
var initArray = [10, 20, 30, 40, 50];
try {
print('========= ${initArray[5]}');
} on RangeError {
print('====== on ${initArray[4]}');
rethrow;
} on FormatException {
print('FormatException');
} catch (e) {
print('try 异常错误提示 !' + e.toString());
} finally {
print('程序运行结束');
}
print('>>>>>>>>>>>> try 异常捕获结束 !');
效果
网友评论