C#中当在try语句块中抛出异常后,程序最后是否回到try块中继续执行后面的语句?

C#中当在try语句块中抛出异常后,程序最后是否回到try块中继续执行后面的语句?,第1张

try

{

    throw new Exception()

    var a = 1

}

catch

{

    var b = 1

}

var c = 1

不会的,如果程序抛出异常,然后会检测调用链,直到有 try 语句,匹配 catch 被捕获,然后执行 catch 语句块,如果直到顶层都没被捕获,则程序异常结束。

这里执行到throw new Exception(),然后抛出异链毁卖常。var a = 1 代码则不会被执行,棚逗异常被catch 捕获,接下来则执行余橡var b = 1 然后则是var c = 1, 然后继续往下执行。

出现InputMismatch后一直循环:

当某一扫描器抛出 InputMismatchException 时,该扫描器散扮不会传递导致该异常的标记,因此可以通过其他某种方法来获取或跳过它。

这是java API文档中的原话。意思是说,如果nextInt方法没有成功解析出一个整数,那么你的输入不会被忽略。因为它或许能被其辩陪它格式解析。

那么你的程序中输入了a后,出现异常,number被赋值100,开始下一次循环,但这时数据缓冲区内你上次输入的a还在,并没有清除,这时继续解析a,还是错误,于是这个过程就一直重复下去了。

现在你要改的是,出现错误把这次的输入清除,冲灶灶只要在catch中,加一句:input.next()就搞定了!

也可以将Scanner写在try里面

一般如果出现非人为异常,即非通过代码throw的方式抛出异常,同时未通过try-catch捕捉。则当前代码不会继续执行,而是向上抛出异常,即返回调用当前代码的位置。如果该位置未对异常进行处理,则继续向上抛出。

通过try-catch捕捉异常,即异常代码在try中,可以在catch中进行异常处理

try{

    ...

    //代码,产生异常

}catch(Exception e){//e是异常类型,一般根父类为Exception类

    ...

    //进行产生异常后的处理

}finally{

   局谨 ...

    //无论握银如何都会执行的代码

}

...

//如果catch中没有继续throw异常以及没有产生新异常,则继续执行的代码

如果想要代码继续执行,可以在catch中不继续抛出异常,则代码将执行catch之后的代码(如果有finally,则先执行finally的代码)。如果想要在产生桐皮基异常之后仍需要执行一部分代码,则可以将该部分代码放在finally中。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12293277.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存