设为首页 加入收藏

TOP

finally块中不能使用的函数
2014-11-24 01:45:13 来源: 作者: 【 】 浏览:1
Tags:finally 不能 使用 函数

今天回顾了下异常,顿时发现平常开发时有这么一点小细节需要说明一下,如果稍微不注意就会存在一个很难验证的故障。有经验的老程序员估计会不在意吧~

在try catch finally 时永远都都只会执行finally块。

那么看看下面这个事例

public int TestFinally(){
		try{
			//这是实际业务
			return 1;
		}catch(Exception e){
			return 2;
		}finally{
			return 3;
		}
	}


最终这段程序会永远返回3,不好奇为什么吗?是因为无论程序正常还是不正常运行最终都会从finally中返回。

如果try语句遇到异常了,try下面代码就根本不会被执行到,转而执行到catch里面,catch里面执行完异常处理会再执行finally语句块,最终会结束掉
如果在try语句块中执行到return语句前一条,未遇到异常,转而执行finally语句块,执行完再执行try中的return语句

那么return 不能在finally语句执行那么其他返回函数如break、continue是否可以呢?或者在finally在抛出异常呢?throw呢?

来尝试下吧

public int TestFinally1(){
		try{
			//这是实际业务
			return 1;
		}catch(Exception e){
			return 2;
		}finally{
			break;
		}
	}

break,这个显然不行,失败。那么continue呢?

	public int TestFinally2(){
		try{
			//这是实际业务
			return 1;
		}catch(Exception e){
			return 2;
		}finally{
			continue;
		}
	}

hoho 当然也不行,失败。最后一个throw

public int TestFinally2() throws Exception{
		try{
			//这是实际业务
			return 1;
		}catch(Exception e){
			return 2;
		}finally{
			throw new Exception();
		}
	}
会是什么结果呢?

结果就是这个方法出现异常,没有任何返回值。。。

有不相信的同学可以试试。。

那么正确的方法如下,finally不做任何返回和异常抛出操作。

public int TestFinally() {
		try{
			//这是实际业务
			return 1;
		}catch(Exception e){
			return 2;
		}finally{
			//不做任何返回和异常抛出操作
		}
	}

谢谢各位






】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇大话设计模式-简单工厂模式(学习.. 下一篇struts2实现猜数字游戏

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: