一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第18天,点击查看活动详情。
介绍
程序在运行的时候,发生的不被期望的问题,它阻止了程序按照程序员的预期正常执行,这就是异常。在异常发生的时候,是任程序自生自灭,立刻退出终止。在Java中,即为Java在编译或运行或者运行过程中出现的错误。
异常处理机制能让程序在异常发生时,按照代码的预先设定的异常处理逻辑,针对性地处理异常,让程序尽最大可能恢复正常并继续执行,且保持代码的清晰。
Java中的异常不仅可以是函数中的语句执行时引发的,也可以是程序员通过throw 语句手动抛出的,只要在Java程序中产生了异常,就会用一个对应类型的异常对象来封装异常,JRE就会试图寻找异常处理程序来处理异常。
情况1: try{} catch(){} finally{} return;
有无异常程序都顺序执行,一定会执行到return 语句,有无异常都输出
情况2: try{ return; }catch(){} finally{} return;
【有异常】
try里面的return语句 在出现异常之后,或者return语句出错,直接忽略try中的return语句,顺序执行try(执行到异常),catch,finally, try里面的return语句 在出现异常之前,这编译报错,因为访问不到return之后的语句
【无异常】
会执行return语句,把return语句中的保存下来,执行finally块中的语句,finally之后的return不会执行,然后程序返回try块中的return,返回开始保存的值,finally改变的是当前方法的变量,返回的是保存的值
情况3: try{ } catch(){return;} finally{} return;
【有异常】
与情况2中无异常相同,返回保存的值,下例返回10,finally块之后的return不会执行 【无异常】
无异常肯定catch块不执行,程序顺序执行try finally ,finally之后,上例无异常返回
情况4: try{ return; }catch(){} finally{return;}
【有异常】
程序顺序执行,try块(到异常),catch块,finally块,finally块有return,后面不能有return idea编译报错,因为根本执行不到,finally覆盖前面return,即使try中的return保存了值,下返回
【无异常】
和上一致,就是catch块不执行,也是覆盖,返回15 情况5: try{} catch(){return;}finally{return;} 【无异常】
和情况4一致,finally覆盖前面,都返回15 情况6: try{ return;}catch(){return;} finally{return;} 【无异常】
和情况4一致,finally覆盖前面,都返回