醉美猴王的gravatar头像
醉美猴王 2017-10-16 17:36:22
java finally里误用return返回错误结果

今天看到一句话,finally 语句块在 try 语句块中的 return 语句之前执行,过了两年突然对这句话感到有些困惑,以为是执行完try之后有finally就最终执行finally,没成想“finally 语句块在 try 语句块中的 return 语句之前执行”才是真理。

package test;

public class TestFinallyReturn {
	public static void main(String[] args) {
		System.out.println(testFinally());
		
	}
	
	@SuppressWarnings("finally")
	private static int testFinally(){
		try {
			System.out.println("try");
			return 1;
		} catch (Exception e) {
			return -1;
		} finally{
			System.out.println("finally");
			return 0;
		}
		
	}

}

执行结果如下:

try
finally
0

由上可知,finally 语句块在 try 语句块中的 return 语句之前执行,一定要注意:

只有资源需要释放的时候,才去使用finally,不要一股脑的扔到finally里面去处理,其他就扔给Java的垃圾回收机制处理吧,否则一不小心返回一个错误的结果就麻烦了。


打赏

已有1人打赏

最代码官方的gravatar头像
最近浏览
水光浮藻  LV6 2021年4月27日
hhuangh  LV5 2019年11月21日
Dz______  LV2 2018年8月3日
zyl  LV34 2018年6月29日
秋水丶俟伊人 2018年6月16日
暂无贡献等级
13524386261  LV1 2018年1月11日
低调人  LV38 2017年12月17日
程序猿全敏  LV29 2017年11月2日
50636315  LV2 2017年10月27日
fengzf  LV16 2017年10月25日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友