• Dart(12)-异常


    一、概述

    Dart 提供了 Exception 和 Error 类型, 以及一些它们的实现类,也可以自定义异常类。与Java不同,Dart的所有异常都是未经检查的异常,并且没有throws。

    二、异常类型

    名称说明
    DeferredLoadException延迟加载异常
    FormatException格式异常
    IntegerDivisionByZeroException整数除零异常
    IOExceptionIO异常
    IsolateSpawnException隔离产生异常
    OSError操作系统异常
    TimeoutException超时异常

    三、Error类型

    名称说明名称说明
    AbstractClassInstantiationError抽象类实例化错误NoSuchMethodError没有这个方法错误
    ArgumentError参数错误NullThrownErrorNull 错误
    AssertionError断言错误OutOfMemoryError内存溢出错误
    AsyncError异步错误RemoteError远程错误
    CastErrorCast 错误StackOverflowError堆栈溢出错误
    ConcurrentModificationError并发修改错误StateError状态错误
    CyclicInitializationError周期初始错误TypeError类型错误
    FallThroughErrorFall Through 错误UnimplementedError未实现的错误
    JsonUnsupportedObjectErrorjson 不支持错误UnsupportedError不支持错误

    四、throw异常

    Dart 语言所有异常都是非检查异常,即方法或代码块不一定要声明异常或捕获异常,编译器不会强制你添加Throw或者try/catch。

    1. // 抛出Exception 对象
    2. throw new IOException(‘IO异常');
    3. // 抛出Error 对象
    4. throw new TypeError();
    5. // 抛出任意非null对象
    6. throw '这是一个抛出异常';

    五、on/try/catch异常

    (1) 可以通过try/on关键字捕获

    当不需要获取异常对象的信息时可以使用try/on。

    1. try{
    2.    throw new OutOfMemoryError();
    3. } on OutOfMemoryError{
    4.    //todo
    5. }

    (2) 可以通过try/catch捕获

    1. try{
    2.    throw new OutOfMemoryError();
    3. } catch(e,s){ //e为异常信息,s为异常Stack Trace
    4.    //todo
    5. }

    (3) try/on/catch组合使用

    1. try{
    2.    throw new OutOfMemoryError();
    3. } on OutOfMemoryError catch(e,s){ //e为异常信息,s为异常Stack Trace
    4.    //todo
    5. }

    (4) 多次try/catch

    1. try{
    2.    throw new OutOfMemoryError();
    3. } on OutOfMemoryError catch(e,s){ //如何异常为该异常时,后面的IOException将不执行
    4.    //todo
    5. } on IOException catch(e) {
    6.    //todo
    7. }

    六、finally

    无论有无异常都会执行finally代码块

    1. try{
    2.    throw new OutOfMemoryError();
    3. } on OutOfMemoryError catch(e,s){
    4.    //todo
    5. } finally {
    6.    //todo
    7. }

    七、注意事项

    所以我们在编码的时候,在可能会有异常的地方要注意阅读API文档,另外自己写的方法,如果有异常抛出,要在注释处进行声明。比如类库中的File类其中一个方法注释:

    1. /**
    2. * Synchronously read the entire file contents as a list of bytes.
    3. *
    4. * Throws a [FileSystemException] if the operation fails.
    5. */
    6. Uint8List readAsBytesSync();

  • 相关阅读:
    java 企业工程管理系统软件源码 自主研发 工程行业适用
    算法学习 | 深度优先搜索~一条道走到黑
    uni-app h5、app模式下集成turn.js 翻书动画
    Spring framework Day21:Spring AOP 注解结合配置类示例
    Java高手的30k之路|面试宝典|精通项目介绍方法&优化简历项目介绍
    SpringCloud微服务实践之六 Feign最佳实践(抽取)
    windows server批量创建用户
    进阶JAVA篇-深入了解 Set 系列集合
    ChatkBQA:一个基于大语言模型的知识库问题生成-检索框架11.13
    计算机二级知识点整理
  • 原文地址:https://blog.csdn.net/life491249957/article/details/126026479