美文网首页
Dart语言基础之异常

Dart语言基础之异常

作者: 星空下奔跑 | 来源:发表于2019-04-04 23:55 被阅读0次

原文:https://www.dartlang.org/guides/language/language-tour

异常

Dart代码可以抛出或捕获异常. 如果未捕获异常,If the exception isn’t caught, the isolate that raised the exception is suspended, and typically the isolate and its program are terminated.

有别于Java, Dart的所有异常都是非检查类型异常.方法不会声明它们可能引发的异常,并且您不需要捕获任何异常。

Dart 提供 ExceptionError 类型, 以及许多预定义的子类型。亦可以自定义异常. 然而,Dart程序可以抛出任何非null对象 - 不仅仅是Exception和Error对象 - 作为Exception。

Throw

59/5000
以下是抛出或引发异常的示例:

throw FormatException('Expected at least 1 section');

你也可以抛出任意对象:

throw 'Out of llamas!';

Note: Production-quality code usually throws types that implement Error or Exception.

因为抛出异常是一个表达式,所以可以在=>语句中以及允许表达式的任何其他地方抛出异常:

void distanceTo(Point other) => throw UnimplementedError();

Catch

捕获或捕获异常会阻止异常传播(除非您重新抛出异常), 捕获异常使您有机会处理它:

try {
  breedMoreLlamas();
} on OutOfLlamasException {
  buyMoreLlamas();
}

要处理可能抛出多种类型异常的代码,可以指定多个catch子句。 与抛出对象的类型匹配的第一个catch子句处理异常。 如果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');
}

如前面的代码所示,您可以使用oncatch或两者。 需要指定异常类型时,请使用on。 当异常处理程序需要异常对象时,请使用catch

您可以为catch()指定一个或两个参数。 第一个是抛出的异常,第二个是堆栈跟踪([StackTrace](https://api.dartlang.org/stable/dart-core/StackTrace-class.html)对象)。

try {
  // ···
} on Exception catch (e) {
  print('Exception details:\n $e');
} catch (e, s) {
  print('Exception details:\n $e');
  print('Stack trace:\n $s');
}

要部分处理异常,同时允许它传播,请使用rethrow关键字。

void misbehave() {
  try {
    dynamic foo = true;
    print(foo++); // Runtime error
  } catch (e) {
    print('misbehave() partially handled ${e.runtimeType}.');
    rethrow; // Allow callers to see the exception.
  }
}

void main() {
  try {
    misbehave();
  } catch (e) {
    print('main() finished handling ${e.runtimeType}.');
  }
}

Finally

无论是否抛出异常,要确保某些代码运行,请使用finally子句。 如果没有catch子句与异常匹配,则在finally子句运行后传播异常:

try {
  breedMoreLlamas();
} finally {
  // Always clean up, even if an exception is thrown.
  cleanLlamaStalls();
}

finally子句在任何匹配的catch子句之后运行:

try {
  breedMoreLlamas();
} catch (e) {
  print('Error: $e'); // Handle the exception first.
} finally {
  cleanLlamaStalls(); // Then clean up.
}

更多请看 Exceptions

相关文章

  • Dart语言基础之异常

    原文:https://www.dartlang.org/guides/language/language-tour...

  • 【Flutter】Dart基本语法

    Dart编程语言——基本概念及变量类型Dart编程语言——方法Dart编程语言——操作符、流程控制和异常Dart编...

  • dart入门潜修系列教程

    dart入门潜修基础篇之基本语法和内置类型dart入门潜修基础篇之方法dart入门潜修基础篇之操作符dart入门潜...

  • 第6章 Dart基础语法 -- 异常处理

    1. 异常的定义 Dart的异常处理机制参考了Java语言的异常处理机制。与Java语言不同的是,Dart中不存在...

  • Flutter系列(2)Dart语言基础

    Flutter的开发语言是Dart语言的,这篇文章就说说Dart语言基础 一、Dart 初体验 在flutter项...

  • Flutter-Dart基础语法入门

    Dart语法基础 Dart语言简介 Dart是Google推出的一门编程语言,最初是希望取代Javascript运...

  • dart系列之:dart语言中的异常

    简介 Exception是程序中的异常情况,在JAVA中exception有checked Exception和u...

  • Dart语言基础,Dart 基础

    Dart 的main方法有两种声明方式 注释 变量的声明 、命名规则、数组类型 Dart是一个强大的脚本类语言,可...

  • Dart基础语法

    Dart基础语法 基本数据类型 Dart 属于强类型语言(在Dart2.0之前,Dart是一门弱类型语言。2.0以...

  • Flutter之Dart语言基础

    Dart语言的诞生 2011年10月,Google 发布了一种新的编程语言 Dart,谷歌希望利用这款语言,帮助程...

网友评论

      本文标题:Dart语言基础之异常

      本文链接:https://www.haomeiwen.com/subject/ofmtiqtx.html