异常抛出

2020-05-21  本文已影响0人  Harely

异常抛出之 Throw

//执行
print('<<<<<<<<<<<<<抛出异常前');
//执行
throw new FormatException('抛出异常!!!');
//或者:  throw '抛出异常!!!';
//不执行
print('抛出异常前>>>>>>>>>>>>');

打印效果:


效果打印

从打印结果来看,一旦发生异常后面的逻辑就不会执行了。


Catch

print('<<<<<<<<<<<<<抛出异常前');
var initArray = [10, 20, 30, 40, 50];
try {
  
  print('========= ${initArray[5]}');
  
} catch (e) {
  print('try 异常错误 !' + e.toString());
}
print('>>>>>>>>>>>> try 异常捕获结束 !');
           
效果: catch 捕获

  用try 包含异常的代码,然后进行捕获。捕获后进行输出错误的代码提示,但是后面的代码依然执行。

print('<<<<<<<<<<<<<抛出异常前');
var initArray = [10, 20, 30, 40, 50];

try {
print('========= ${initArray[5]}');

} on RangeError {
print('====== on ${initArray[4]}');
} on FormatException {
print('FormatException');
} catch (e) {
print('try 异常错误提示 !' + e.toString());
}
print('>>>>>>>>>>>> try 异常捕获结束 !');

效果:


异常捕获

  我们看到详细的错误信息没有打印,因为代码逻辑走到 on RangeError 分支,而输出的详细错误信息是作为默认异常处理才被执行的。

print('<<<<<<<<<<<<<抛出异常前');
var initArray = [10, 20, 30, 40, 50];

try {
  print('========= ${initArray[5]}');
  
} on RangeError {
  print('====== on ${initArray[4]}');
  rethrow;
} on FormatException {
  print('FormatException');
} catch (e) {
  print('try 异常错误提示 !' + e.toString());
}
print('>>>>>>>>>>>> try 异常捕获结束 !');

效果:


再次抛出异常并提示打印问题

  我们看到当我们使用了 rethrow 后,我们的代码并没有对后面的逻辑进行执行,尤其是 catch 中的捕获,仅仅是给出了错误的原因。


Finally

            print('<<<<<<<<<<<<<抛出异常前');
            
            var initArray = [10, 20, 30, 40, 50];

            try {
              print('========= ${initArray[5]}');
              
            } on RangeError {
              print('====== on ${initArray[4]}');
              rethrow;
            } on FormatException {
              print('FormatException');
            } catch (e) {
              print('try 异常错误提示 !' + e.toString());
            } finally {
              print('程序运行结束');
            }
            print('>>>>>>>>>>>> try 异常捕获结束 !');
效果
上一篇下一篇

猜你喜欢

热点阅读