Java finally与return

在try-catch-finally块中finally有两种情况不会执行

1.在try-catch块中调用system.exit(0)终结jvm finally不会执行

2.在多线程下try-catch被interrupt中断 可能不会执行finally

try-catch-finally中出现return执行顺序改变


图1

如图1 如果未发生异常正常执行 则是先执行Try中的内容 打印 "执行try" 然后返回 2

总结:如果try中有return, finally中也有return 在未发生异常时会执行try 中return前面的语句 也会执行try的return关键字后面的语句 但是不会返回 紧接着去执行finally 如果finally中有return则会一路执行完最后返回finally中的return的结果


图2

如图2 未发生异常 先打印 "执行try" 在打印 "执行finally" 最后返回1

            如果发生异常 先打印 "执行try" 在打印 “执行finally” 最后返回2

总结:不管try中有return还是catch中有return 总是当执行到return时先不返回结果 去执行finally 然后才会去相应的地方返回结果


图3

如图3 

未发生异常  先打印 "执行try"  在打印 “执行finally”  再返回1 

这里和上面的有点不同,在try中执行到return时 就会把return后面的语句执行了 这是保存下待返回的数据 再去执行finally 这时try已经保存了将要返回的数据 即使finally中将i自增1此时try中返回的还是1

发生异常

发生异常同未发生返回的相同 就是多了个执行catch

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容