-
Dart提供了Exception和Error以及一些子类型,也支持自定义异常类型。 - 有别于
Java,Dart异常属于非检查异常。方法不一定声明了所抛出的异常, 也不要求捕获任何异常。 -
Dart支持抛出任何非null对象作为异常,不仅限于实现了Exception/Error的对象。 -
catch中无法指定具体异常类型,需要结合on来使用。 - 使用
rethrow关键字可以把捕获的异常重新抛出。 -
finally关键字的使用和Java一致。
void f1() {
throw Exception("Juice");
}
void main() {
try {
f1();
} catch (e,s) {
print(e.runtimeType);
print(s.runtimeType);
print(e);
}
}
运行结果为_Exception _StackTrace Exception: Juice
区别于java 中的catch语句catch(Exception e),Dart指明对象的具体类型。e代表抛出的异常对象,s表示异常堆栈信息。(命名可以不用e s,不需要使用异常堆栈信息,也可以直接改为catch(e))
int f2(int i) {
if (i == 1) {
throw 300;
} else if (i == 2) {
throw "Juice";
} else if (i == 3) {
throw print;
}
return i;
}
void f3(int i) {
try {
int result = f2(i);
print(result);
} on int catch (e) {
print("int");
} on String catch (e) {
print("String");
} on Function catch (e) {
e("Function");
}
}
void main() {
f3(1);
f3(2);
f3(3);
f3(99);
}
f2方法输入值为1 2 3是分别抛出int String Function对象(非 Exception /Error 对象),其他时候正常返回值。
f3方法则是执行f2方法,捕获异常(结合on使用),并对响应异常进行操作。
输入值为1 时,抛出300,执行f3中捕获int对象操作,输出int
输入值为2 时,抛出字符串Juice,执行f3中捕获String对象操作,输出String
输入值为3 时,抛出方法print,执行f3中捕获Function对象操作(此时的对象e即为print方法),输出Function
输入值为99 时,正常执行,输出99









网友评论