头条创作挑战赛 本文同步本人掘金平台的文章:https:juejin。cnpost7129312940531908645 推荐使用线上编辑器dartpad。cn进行学习,测试 Dart将异常封装到一个类中,出现错误时就会抛出异常消息。使用throw抛出异常 使用throw抛出异常,但是不推荐使用。还不如一个print来得实在。voidmain(){errorHere();UncaughtError:FirsterrorerrorThere();UncaughtError:Exception:Seconderror}voiderrorHere(){throw(Firsterror);}voiderrorThere()throwException(Seconderror);复制代码捕获异常 当发生时候,我们捕获到错误,然后将错误另行处理。错误的捕获是一个自下而上的操作,如果所有的方法都处理不了错误,则程序终止。 trycatch语句 其语法格式如下:try{相关逻辑代码}catch(error,stackTrace){处理错误}复制代码error是异常对象stackTrace是StackTrace对象,异常的堆栈信息 比如:voidmain(){try{throw(ThisisaDemo。);}catch(error,stackTrack){输出异常信息print(error:{error。toString()});error:ThisisaDemo。输出堆栈信息print(stackTrack:{stackTrack。toString()});stackTrack:ThisisaDemo。atObject。wrapException(:335:17)atmain(:2545:17)at:3107:7at:3090:7atdartProgram(:3101:5)at:3109:3atreplaceJavaScript(https:dartpad。cnscriptsframe。js:19:19)atmessageHandler(https:dartpad。cnscriptsframe。js:80:13)}}复制代码 tryoncatch语句 try代码块中有很多语都发生了错误,发生错误的种类又不同,我们可以通过on来实现。try{逻辑代码}onExceptionTypecatch(error){处理代码块}onExceptionTypecatch(error){处理代码块}catch(error,stackTrace){处理代码块}复制代码ExceptionType表示错误类型。 Dart支持的内置错误有: 错误 描述 DefferedLoadException 延迟的库无法加载 FormatException 转换失败 IntegerDivisionByZeroException 当数字除以零时抛出错误 IOException 输入输出错误 IsolateSpawnException 无法创建隔离抛出错误 Timeout 异步超时抛出错误finally语句 无论是否有异常,都会执行finally内部的语句。try{逻辑代码}catch(error,stackTrace){错误处理}finally{里面的代码块,无论正确还是错误都会处理}复制代码 finally这个很容易理解,只需要记住上面的语法,使用就行了。自定义异常 上面我们已经介绍了Dart的内置异常,但是远远不够使用。那么,我们能够自定义自己的异常? 是的,我们可以按照实际情况自定义异常,Dart中的每个异常都是内置类Exception的子类型。我们可以这样定义:voidmain(){try{thrownewMyException(ThisisaDemo。);}catch(error){print(error。toString());ThisisaDemo。}try{thrownewMyException();}catch(error){print(error。toString());MyException。}}自定义异常类classMyExceptionimplementsException{异常信息SMyException(this。msg);重写toString方法overrideStringtoString(){if(this。msg。isEmpty){returnMyException。;}else{returnthis。}}}复制代码 如果读者觉得文章还可以,不防一键三连:关注点赞收藏