在try-catch-finally块中finally有两种情况不会执行
1.在try-catch块中调用system.exit(0)终结jvm finally不会执行
2.在多线程下try-catch被interrupt中断 可能不会执行finally
try-catch-finally中出现return执行顺序改变
如图1 如果未发生异常正常执行 则是先执行Try中的内容 打印 "执行try" 然后返回 2
总结:如果try中有return, finally中也有return 在未发生异常时会执行try 中return前面的语句 也会执行try的return关键字后面的语句 但是不会返回 紧接着去执行finally 如果finally中有return则会一路执行完最后返回finally中的return的结果
如图2 未发生异常 先打印 "执行try" 在打印 "执行finally" 最后返回1
如果发生异常 先打印 "执行try" 在打印 “执行finally” 最后返回2
总结:不管try中有return还是catch中有return 总是当执行到return时先不返回结果 去执行finally 然后才会去相应的地方返回结果
如图3
未发生异常 先打印 "执行try" 在打印 “执行finally” 再返回1
这里和上面的有点不同,在try中执行到return时 就会把return后面的语句执行了 这是保存下待返回的数据 再去执行finally 这时try已经保存了将要返回的数据 即使finally中将i自增1此时try中返回的还是1
发生异常
发生异常同未发生返回的相同 就是多了个执行catch