美文网首页
try catch finally详解

try catch finally详解

作者: _fatef | 来源:发表于2018-01-05 15:47 被阅读0次
    • 无论是否有异常,finally块都会执行;
    • 当try和catch中有return时,finally也会执行;
    • finally块在return后面的表达式运算完之后执行(此时并没有返回运算的的值,而是先把要返回的值保存起来,管finally中的代码怎么样, 返回的值都不会改变,任然是之前保存的值),所以函数返回值是在finally执行前确定的;
    • finally中最好不要包含return,否则程序会有警告(finally block does not complete normally)可能会使程序提前退出,返回值不是try或catch中保存的返回值。

    注:有两种情况finally块将不会执行

    1. 在try语句还没有执行就return了。故finally块被执行的充分必要条件:对应的try语句一定执行。
    2. 在try块中有System.exit(0);这样的语句,System.exit(0);是终止Java虚拟机JVM的,连JVM都停止了,所有都结束了,当然finally语句也不会被执行到。
    • 正常情况:try{}catch(){}finally{}
      顺序执行;
    • try中带return的情况:try{return}catch(){}finally{}


      此时return的返回值已经被保存

      try中return时返回值被保存,等finally执行完之后才能return完成;

    • catch中带return的情况:try{}catch(){return}finally{}
      与try中带return一样
    • finally中带return的情况:try{return}catch(){return}finally{return}


      finally中有return会有警告

      由于finally块中有return,会使程序提前退出并不执行try或catch中的return。

    注:如果finally存在的话,任何执行try 或者catch中的return语句之前,都会先执行finally语句。如果finally中有return语句,那么程序就return了,所以finally中的return是一定会被return的,编译器把finally中的return实现为一个warning。

    相关文章

      网友评论

          本文标题:try catch finally详解

          本文链接:https://www.haomeiwen.com/subject/hyhsnxtx.html