前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于Java中return和finally的执行顺序

关于Java中return和finally的执行顺序

作者头像
我是攻城师
发布2018-08-03 10:58:51
6360
发布2018-08-03 10:58:51
举报
文章被收录于专栏:我是攻城师我是攻城师

如下代码:

代码语言:javascript
复制
try {  
    something();  
    return success;  
}  
catch (Exception e) {   
    return failure;  
}  
finally {  
    System.out.println("finayll 执行... ");
}

在try或者catch语句里面,如果有return语句,那么finally会不会执行?

即使有return语句,finally块在执行完try或者catch块代码之后是会被调用的,但是特殊情况下finally块语句是不会被执行的,如下几种情况:

(1)在try和catch块之中执行System.exit()方法直接退出虚拟机

(2)jvm突然崩溃或者机器宕机等硬件故障

(3)执行了无限循环,或者其他不可被打断,不可被终止的语句

(4)执行了kill -9 pid 命令

此外,要避免一些坏的编程风格:

(1)在finally中使用return语句,虽然java是支持的,但一旦在finally中使用return那么try和catch中的return就不会被执行。

(2)不要在finally中修改变量数据,比如赋值类操作。

上面的这两种编程习惯,在java层面都是支持的,这样的代码虽然能正常运行,但是可读性非常差而且难以维护。

总结:

finally语句块在Java里面最大的作用是避免资源泄露问题,通常用于当程序发生异常或者正常执行结束时用来关闭各种资源连接的,所以在使用的时候一定要注意,尽量不要做一些其他的业务逻辑或者在里面使用return语句从而避免其导致的不可预料或者难以维护的问题。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-07-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 我是攻城师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档