• try-catch-finally中return语句的执行


    catch里return后还会执行finally吗??
    在java里,是的。
    但是值得注意的是,在存在try-catch-finally的方法中,return可能出现的位置有4个,在try中,在catch中,在finally中,在finally后(try-catch-finally外的语句块)。
    在这4个位置都出现return的情况下(事实上应该是不可能的,如果前面3个位置都存在return,那么最后一个位置的return就成了unreachable code,编译不会通过),最终会执行的return应该是finally中的return。也就是finally中的return会覆盖掉其它位置的return。
    但当finally中不存在return,而catch中存在return,但finally中的语句又会对catch中的return的值产生影响时,情况就有点复杂。见下面这个例子:

    int ret = 0;try{ throw new Exception(); }catch(Exception e){ ret = 1; return ret;}finally{ ret = 2; //return ret;}return ret;  

    这里finally中没有return,但是将catch中要return的ret赋值为2.那么最后返回的值是多少?
    是1. 为什么?
    从调试中可以知道Finally中的赋值语句的确被执行了,而执行完这条finally语句后的下一条语句就是catch中的return,那么为啥返回的是1呢?
    查看了一下java language specification 3.0,似乎没有相关情形的描述。
    结合网上的一些相关文章,只能得出一个推断就是在这种情况下(catch中有return,finally中没有return),return的值在执行finally之前已经确定下来了。
    另一个值得注意的是最后的return(位于try-catch-finally外)并没有被执行。

  • 相关阅读:
    nginx 转发配置
    Rancher中httpd证书的管理和使用
    JDK-docker
    软路由
    rancher相关
    rancher部署
    电商 好文 知识积累
    SpringBlade 接口文档 请求token接口报错
    SpringBlade 接口文档 无法访问
    电商 好文
  • 原文地址:https://www.cnblogs.com/fjhh/p/5370848.html
Copyright © 2020-2023  润新知