1. 程式人生 > 其它 >Dart基礎語法<六> 異常

Dart基礎語法<六> 異常

技術標籤:Flutter學習筆記--Dart基礎語法篇flutterdart

  1. Dart 提供了 ExceptionError 以及一些子型別,也支援自定義異常型別。
  2. 有別於JavaDart 異常屬於非檢查異常。方法不一定聲明瞭所丟擲的異常, 也不要求捕獲任何異常。
  3. Dart支援丟擲任何非 null 物件作為異常,不僅限於實現了 Exception /Error 的物件。
  4. catch中無法指定具體異常型別,需要結合on來使用。
  5. 使用 rethrow 關鍵字可以把捕獲的異常重新丟擲。
  6. 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