Dart2基礎(七)
阿新 • • 發佈:2018-12-13
目錄
Dart2的異常與Java是非常類似的。Dart2的異常是Exception或者Error(包括它們的子類)的型別,甚至可以是非Exception或者Error類,也可以丟擲,但是不建議這麼使用。
Exception主要是程式本身可以處理的異常,比如:IOException。我們處理的異常也是以這種異常為主。
Error是程式無法處理的錯誤,表示執行應用程式中較嚴重問題。大多數錯誤與程式碼編寫者執行的操作無關,而表示程式碼執行時 DartVM出現的問題。比如:記憶體溢位(OutOfMemoryError)等等。
與Java不同的是,Dart2是不檢測異常是否宣告的,也就是說方法或者函式不需要宣告要丟擲哪些異常。
-
丟擲異常
使用throw丟擲異常,異常可以是Excetpion或者Error型別的,也可以是其他型別的,但是不建議這麼用。另外,throw語句在Dart2中也是一個表示式,因此可以是=>。
// 非Exception或者Error型別是可以丟擲的,但是不建議這麼用 testException(){ throw "this is exception"; } testException2(){ throw Exception("this is exception"); } // 也可以用 => void testException3() => throw Exception("test exception");
-
捕獲異常
使用on可以捕獲到某一類的異常,但是獲取不到異常物件; catch可以捕獲到異常物件。這個兩個關鍵字可以組合使用。
rethrow可以重新丟擲捕獲的異常。
testException(){ throw FormatException("this is exception"); } main(List<String> args) { try{ testException(); } on FormatException catch(e){ // 如果匹配不到FormatException,則會繼續匹配 print("catch format exception"); print(e); rethrow; // 重新丟擲異常 } on Exception{ // 匹配不到Exception,會繼續匹配 print("catch exception") ; }catch(e, r){ // 匹配所以型別的異常. e是異常物件,r是StackTrace物件,異常的堆疊資訊 print(e); } }
-
finally
finally內部的語句,無論是否有異常,都會執行。
testException(){
throw FormatException("this is exception");
}
main(List<String> args) {
try{
testException();
} on FormatException catch(e){
print("catch format exception");
print(e);
rethrow;
} on Exception{
print("catch exception") ;
}catch(e, r){
print(e);
}finally{
print("this is finally"); // 在rethrow之前執行
}
}