Java finally与return

2018-10-29  本文已影响0人  黎明第一束光

在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

上一篇下一篇

猜你喜欢

热点阅读