Dart基礎語法<六> 異常
阿新 • • 發佈:2020-12-28
技術標籤:Flutter學習筆記--Dart基礎語法篇flutterdart
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