携手创作,共同成长!这是我参加「日新计划 8 月更文挑战」的第13天,点击查看活动概况

引荐运用线上编辑器 dartpad.cn 进行学习,测验~

Dart 将反常封装到一个类中,呈现过错时就会抛出反常音讯。

运用 throw 抛出反常

运用 throw 抛出反常,可是不引荐运用。还不如一个 print 来得真实。

void main() {
//   errorHere(); // Uncaught Error: First error
  errorThere(); // Uncaught Error: Exception: Second error
}
void errorHere() {
  throw('First error');
}
void errorThere() => throw Exception('Second error');

捕获反常

当产生时分,咱们捕获到过错,然后将过错另行处理。过错的捕获是一个自下而上的操作,如果一切的办法都处理不了过错,则程序停止。

try-catch 句子

其语法格局如下:

try {
  // 相关逻辑代码
} catch(error, stackTrace) {
  // 处理过错
}
  • error 是反常目标
  • stackTraceStackTrace 目标,反常的仓库信息

比方:

void main() {
  try{
    throw('This is a Demo.');
  } catch(error, stackTrack) {
    // 输出反常信息
    print('error: ${error.toString()}'); // error: This is a Demo.
    // 输出仓库信息
    print('stackTrack: ${stackTrack.toString()}');
//     stackTrack: This is a Demo.
//     at Object.wrapException (<anonymous>:335:17)
//     at main (<anonymous>:2545:17)
//     at <anonymous>:3107:7
//     at <anonymous>:3090:7
//     at dartProgram (<anonymous>:3101:5)
//     at <anonymous>:3109:3
//     at replaceJavaScript (https://dartpad.cn/scripts/frame.js:19:19)
//     at messageHandler (https://dartpad.cn/scripts/frame.js:80:13)
  }
}

try-on-catch 句子

try 代码块中有很多语都产生了过错,产生过错的种类又不同,咱们可以经过 on 来实现。

try {
  // 逻辑代码
} on ExceptionType catch(error) {
  // 处理代码块
} on ExceptionType catch(error) {
  // 处理代码块
} catch(error, stackTrace) {
  // 处理代码块
}
  • ExceptionType 表明过错类型。

Dart 支撑的内置过错有:

过错 描绘
DefferedLoadException 推迟的库无法加载
FormatException 转化失利
IntegerDivisionByZeroException 当数字除以零时抛出过错
IOException 输入输出过错
IsolateSpawnException 无法创建阻隔抛出过错
Timeout 异步超时抛出过错

finally 句子

不管是否有反常,都会履行 finally 内部的句子。

try {
  // 逻辑代码
} catch(error, stackTrace) {
  // 过错处理
} finally {
  // 里边的代码块,不管正确仍是过错都会处理
}

finally 这个很容易理解,只需要记住上面的语法,运用就行了。

自界说反常

上面咱们已经介绍了 Dart 的内置反常,可是远远不够运用。那么,咱们可以自界说自己的反常?

是的,咱们可以按照实际情况自界说反常,Dart 中的每个反常都是内置类 Exception 的子类型。咱们可以这样界说:

void main() {
  try {
    throw new MyException('This is a Demo.');
  } catch(error) {
    print(error.toString()); // This is a Demo.
  }
  try {
    throw new MyException('');
  } catch(error) {
    print(error.toString()); // My Exception.
  }
}
// 自界说反常类
class MyException implements Exception {
  // 反常信息
  String msg = '';
  MyException(this.msg);
  // 重写 toString 办法
  @override
  String toString() {
    if(this.msg.isEmpty) {
      return 'My Exception.';
    } else {
      return this.msg;
    }
  }
}

往期精彩引荐

  • Dart 知识点 – 数据类型
  • Flutter 开发呈现的那些 Bugs 和解决方案「继续更新… 」

如果读者觉得文章还可以,不防一键三连:关注➕点赞➕保藏