Dart 之Exceptions异常
2019-04-21 本文已影响1人
youseewhat
Exceptions(异常)
相比较java的异常有一些区别
Dart 异常是非检查异常。 方法不一定声明了他们所抛出的异常
Dart提供的异常类型:
- Exceptions
- Error
- 自定义异常
Dart 代码可以 抛出任何非 null 对象为异常,不仅仅是实现了 Exception 或者 Error 的对象。
抛出异常
throw new FormatException('Expected at least 1 section');
throw 'Out of llamas!';
异常捕获
Dart 对于抛出多种类型的异常,可以分别捕获对应类型的异常
如果没有指定捕获异常类型,则可以捕获任何类型的异常
可以使用on
或者 catch
来声明捕获语句,也可以 同时使用。使用 on
来指定异常类型,使用 catch 来 捕获异常对象
try {
breedMoreLlamas();
} on OutOfLlamasException {
// A specific exception
buyMoreLlamas();
} on Exception catch (e) {
// Anything else that is an exception
print('Unknown exception: $e');
} catch (e) {
// No specified type, handles all
print('Something really unknown: $e');
}
函数 catch()
可以带有一个或者两个参数, 第一个参数为抛出的异常对象, 第二个为堆栈信息
...
} on Exception catch (e) {
print('Exception details:\n $e');
} catch (e, s) {
print('Exception details:\n $e');
print('Stack trace:\n $s');
}
使用 rethrow
关键字可以把捕获的异常给 重新抛出
} catch (e) {
// No specified type, handles all
print('Something really unknown: $e');
rethrow;
}
Finally
使用 一个finally
语句来确保一些代码肯定被执行
没有 catch
语句来捕获异常, 则在执行完 finally
语句后, 异常被抛出了
try {
} finally {
}
一般finally
放在匹配所有类型异常的catch
之后
try {
} catch(e) {
} finally {
}