结果是i=5 【catch中的i=3 再29行的i(catch的return无效),再33行i=i+2 再35行i++但是finally的return的表达式对基本数据类型是不起作用的,只起到return的作用】
------------------------------------------------------------------------------------------------------------
这样就可以解释为啥是t is 3 finally还是5。因为finally那还是i=3+2;而29行的i还是用的catch里面的3(但是29行的i是新的局部引用了,引用了之前的值)
https://blog.csdn.net/kavensu/article/details/8067850推荐阅读
https://www.cnblogs.com/superFish2016/p/6687549.html推荐阅读
总结以上测试:
1、finally语句总会执行
2、如果try、catch中有return语句,finally中没有return,那么在finally中修改除包装类型和静态变量、全局变量以外的数据【我认为就是基本的数据类型】都不会对try、catch中返回的变量有任何的影响(包装类型、静态变量会改变、全局变量)
3、尽量不要在finally中使用return语句,如果使用的话,会忽略try、catch中的返回语句(但是try、catch的return的运算都会执行),也会忽略try、catch中的异常,屏蔽了错误的发生
4、finally中避免再次抛出异常,一旦finally中发生异常,代码执行将会抛出finally中的异常信息,try、catch中的异常将被忽略
所以在实际项目中,finally常常是用来关闭流或者数据库资源的,并不额外做其他操作。