如下代码:
在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语句从而避免其导致的不可预料或者难以维护的问题。
领取专属 10元无门槛券
私享最新 技术干货